/* * Desempate para N threads. */ #include #include #include #include #define N 5 volatile int s = 0; /* Variável compartilhada */ volatile int interesse[N] = {-1, -1, -1, -1, -1}; volatile int ultimo[N-1]; volatile int c = 0; void* f_thread(void *v) { int thr_id = *(int*)v; int f,k,i; for (i = 0; i < 30; i++) { for (f = 0; f < N-1; f++) { interesse[thr_id] = f; ultimo[f] = thr_id; for (k = 0; k < N && ultimo[f] == thr_id; k++) if (k != thr_id) while (f <= interesse[k] && ultimo[f] == thr_id); } c++; s = thr_id; printf("Thread %d, s = %d, c = %d.\n", thr_id, s, c); interesse[thr_id] = -1; sleep(1); } return NULL; } int main() { pthread_t thr[N]; int id[N], i; for (i = 0; i < N; i++) { id[i] = i; pthread_create(&thr[i], NULL, f_thread, &id[i]); } for (i = 0; i < N; i++) pthread_join(thr[i], NULL); return 0; }