/* compile with -DV for volatile, -UV for not volatile */ #ifdef V #define VOLATILE volatile #else #define VOLATILE #endif extern VOLATILE char wants_to_enter[2]; extern VOLATILE char turn; extern VOLATILE long counter; #define me 0 #define other (1-me) void p(void) { wants_to_enter[me] = 1; while (wants_to_enter[other]) { if (turn != me) { wants_to_enter[me] = 0; while (turn != me) {} wants_to_enter[me] = 1; } } counter++; turn = other; wants_to_enter[me] = 0; }