So, seeing different things in your comment, you mean that Thread C see x == 1, y == 0 and Thread D see x == 0 and y == 1. Is this possible with consistent consistency?
Suppose this complete order (modification is a transition between these symbolized states of memory):
{x==0,y==0} : S0 {x==1,y==0} : S1 {x==1,y==1} : S2
When we say βsee,β we mean that the potential of the flow fulfills the load. Two loads cannot be executed simultaneously in the same thread. So, how is it possible that thread C sees x == 1 and then sees y == 0 and Thread D sees x == 0 and then sees y == 1? Thread C performs two loads, while memory is in state S1, and in thread D they see x in state S0, and then see y in state S2.
In your code example, what happens is that Thread C load x then loads y, and Thread D loads y again until it is true, and then load x. Thus, after y == 1, this ensures that x==1 in that complete order.
As Mine said in his comment, nothing could have been expected if instead of using a sequence of sequential sequences, the memory retrieval / release order was used: the retrieval / release semantics does not imply any sort of full ordering, moreover, it does not occur before the relationship between the storage to x , and the storage is y . Thus, the statement z.load()!=0 can be satisfied.
source share