C auto/C-RW-G+RW-R (* * Result: Never * * Process 0 starts (t=100000). * * P0 advances one grace period (t=200000). * * P1 goes back a bit less than one grace period (t=101001). * * Process 0 start at t=100000, process 2 end at t=101001: Cycle forbidden. *) { } P0(int *x0, int *x1) { r1 = READ_ONCE(*x0); synchronize_rcu(); WRITE_ONCE(*x1, 1); } P1(int *x0, int *x1) { rcu_read_lock(); r1 = READ_ONCE(*x1); WRITE_ONCE(*x0, 1); rcu_read_unlock(); } exists (0:r1=1 /\ 1:r1=1)