#include #include #include pthread_barrier_t barrier; int at_barrier = 0; void *thread (int p) { while (1) { printf("Thread %d starting\n", p); usleep(1000000 * p); at_barrier++; printf("Thread %d at barrier (on barrier %d thread(s))\n", p, at_barrier); pthread_barrier_wait(&barrier); at_barrier--; if(!at_barrier) printf("---Barrier passed---\n"); usleep(1000000 * p); } } int main () { pthread_t thr_id; pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); pthread_barrier_init(&barrier, NULL, 5); pthread_create(&thr_id, &attr, thread, (void *) 1); pthread_create(&thr_id, &attr, thread, (void *) 2); pthread_create(&thr_id, &attr, thread, (void *) 3); pthread_create(&thr_id, &attr, thread, (void *) 4); pthread_create(&thr_id, &attr, thread, (void *) 5); usleep(50000000); //simulation time return 0; }