/* * Deadlock: thread i espera thread (i+1)%N terminar. */ #include #include #include #include #define N 5 pthread_t thr[N]; void* f_thread(void *v) { int thr_id; thr_id = *(int *) v; printf("Thread %d.\n", thr_id); sleep(2); /* Aguarda todas as threads serem criadas. */ pthread_join(thr[(thr_id+1)%N], NULL); printf("Não houve deadlock.\n"); return NULL; } int main() { int i, id[N]; for (i = 0; i < N; i++) { id[i] = i; pthread_create(&thr[i], NULL, f_thread, (void*) &id[i]); } sleep(100); return 0; }