/* * Teste da função pthread_barrier_wait: múltiplas barreiras. */ #include #include #include #include #include #define N_BARRIERS 2 #define N 10 /* N deve ser múltiplo de N_BARRIERS */ pthread_barrier_t barrier[N_BARRIERS]; volatile int c; void *f_thread(void* v) { int id = (int) v; int i; for (i = 0; i < 2; i++) { int b = id % N_BARRIERS; sleep(random() % 3 + 1); printf("Thread %d vai entrar na barreira %d.\n", id, b); pthread_barrier_wait(&barrier[b]); printf("Thread %d passou pela barreira %d.\n", id, b); } return NULL; } int main() { pthread_t thr[N]; int i = 0; srandom(time(NULL)); for (i = 0; i < N_BARRIERS; i++){ pthread_barrier_init(&barrier[i], NULL, N / N_BARRIERS); } for (i = 0; i < N; i++) pthread_create(&thr[i], NULL, f_thread, (void*) i); pthread_exit(NULL); }