C C-R+o-wmb-o+o+mb+o.litmus { } P0(int *a, int *b) { WRITE_ONCE(*a, 1); smp_wmb(); WRITE_ONCE(*b, 1); } P1(int *a, int *b) { int r1; WRITE_ONCE(*b, 2); smp_mb(); r1 = READ_ONCE(*a); } exists (b=2 /\ 1:r1=0)