#include #include int x = 0; int y = 0; int r1 = 0; int r2 = 0; pthread_barrier_t barrier; void* thread1(void* arg) { y = 1; pthread_barrier_wait(&barrier); // Memory barrier r1 = x; return NULL; } void* thread2(void* arg) { x = 1; pthread_barrier_wait(&barrier); // Memory barrier r2 = y; return NULL; } int main() { pthread_t t1, t2; pthread_barrier_init(&barrier, NULL, 2); pthread_create(&t1, NULL, thread1, NULL); pthread_create(&t2, NULL, thread2, NULL); pthread_join(t1, NULL); pthread_join(t2, NULL); printf("r1 = %d, r2 = %d\n", r1, r2); pthread_barrier_destroy(&barrier); return 0; }