C RCU+sync+read (* * Result: Never * * This litmus test demonstrates that after a grace period, an RCU updater always * sees all stores done in prior RCU read-side critical sections. Such * read-side critical sections would have ended before the grace period ended. * * This is one implication of the RCU grace-period guarantee, which says (among * other things) that an RCU read-side critical section cannot span a grace period. *) { int x = 0; int y = 0; } P0(int *x, int *y) { rcu_read_lock(); WRITE_ONCE(*x, 1); WRITE_ONCE(*y, 1); rcu_read_unlock(); } P1(int *x, int *y) { int r0; int r1; r0 = READ_ONCE(*x); synchronize_rcu(); r1 = READ_ONCE(*y); } exists (1:r0=1 /\ 1:r1=0)