#define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h> #include <time.h> #define THREAD_COUNT 4 pthread_barrier_t mybarrier; void* threadFn(void *id_ptr) { int thread_id = *(int*)id_ptr; int wait_sec = 1 + rand() % 5; printf("thread %d: Wait for %d seconds.\n", thread_id, wait_sec); sleep(wait_sec); printf("thread %d: I'm ready...\n", thread_id); pthread_barrier_wait(&mybarrier); printf("thread %d: going!\n", thread_id); return NULL; } int main() { int i; pthread_t ids[THREAD_COUNT]; int short_ids[THREAD_COUNT]; srand(time(NULL)); pthread_barrier_init(&mybarrier, NULL, THREAD_COUNT + 1); for (i=0; i < THREAD_COUNT; i++) { short_ids[i] = i; pthread_create(&ids[i], NULL, threadFn, &short_ids[i]); } printf("main() is ready.\n"); pthread_barrier_wait(&mybarrier); printf("main() is going!\n"); for (i=0; i < THREAD_COUNT; i++) { pthread_join(ids[i], NULL); } pthread_barrier_destroy(&mybarrier); return 0; }
There was an error while loading. Please reload this page.