1 #define _POSIX_C_SOURCE 200809L
9 pthread_barrier_t barrier;
11 static void * thread_doit(void *t)
15 printf("Thread %d: Waiting at barrier\n", *tid);
17 pthread_barrier_wait(&barrier);
19 printf("Thread %d: Crossed barrier\n", *tid);
24 int main(int argc, char* argv[])
27 printf("Expected usage: %s THREAD_NUM DEBUG_FLAG\n", argv[0]);
28 printf("DEBUG_FLAG: 0 - Don't display debug information, 1 - Display debug information\n");
32 int THREAD_NUM = atoi(argv[1]);
33 DEBUG = atoi(argv[2]);
35 pthread_t *threads = malloc(sizeof(pthread_t) * THREAD_NUM);
37 pthread_barrier_init(&barrier, NULL, THREAD_NUM);
39 int *tids = malloc(sizeof(int) * THREAD_NUM);
40 for(int i = 0; i < THREAD_NUM; i++) {
42 pthread_create(&threads[i], NULL, &thread_doit, &tids[i]);
45 for(int i = 0; i < THREAD_NUM; i++) {
46 pthread_join(threads[i], NULL);
51 pthread_barrier_destroy(&barrier);