In a simplified version:
A -1-> B
B -2-> C
A ---3------> C
The human expectation is that 2 happens "before" 3, because that's how it looks. The reality is that 1 happens before 3, and 1 happens before 2, but 2 and 3 have no causal relation - and the runtime is free to rearrange them in any order.That's why the solution is essentially
A -1-> B
B -2-> C
B -3-> C
Because then 2 really happens before 3.