/* * Teste da função pthread_barrier_wait: barreira reutilizável e * restrita. Um conjunto de N threads deve passar por uma barreira de * sincronização com capacidade para M threads. * */ #include #include #include #include #include #define N 5 #define M 3 pthread_barrier_t barrier; volatile int c; void *f_thread(void* v) { int id = (int) v; int i; for (i = 1; i < 4; i++) { sleep(random() % 3 + 1); printf("Thread %d vai entrar na barreira pela %da vez.\n", id, i); pthread_barrier_wait(&barrier); printf("Thread %d passou pela barreira.\n", id); } return NULL; } int main() { pthread_t thr[N]; int i = 0; srandom(time(NULL)); pthread_barrier_init(&barrier, NULL, M); for (i = 0; i < N; i++) pthread_create(&thr[i], NULL, f_thread, (void*) i); pthread_exit(NULL); }