#include struct { unsigned char flag; unsigned char val; } l; int main(int argc, char **argv) { int i; # pragma omp sections { # pragma omp section { for (i = 0; i < 100000000; i++) { l.val += 2; asm volatile("lock or $0x0,(%%rsp)" : : : "memory"); if (l.flag) break; asm volatile("" : : : "memory"); } l.flag = 1; } # pragma omp section while(!l.flag) asm volatile("":::"memory"); //asm volatile("lock orb $0x0, %0"::"m"(l.flag):"memory"); } return 0; }