For all three scenarios, imagine we're starting with i = 0
and j = 0
... both one() and two() get to perform two operations, but the order between one and two is undefined:
a == b
two() loads i (a = 0)
two() loads j (b = 0)
one() increments i (i = 1)
one() increments j (j = 1)
a > b
one() increments i (i = 1)
two() loads i (a = 1)
two() loads j (b = 0)
one() increments j (j = 1)
a < b (rarer)
two() loads i (a = 0)
one() increments i (i = 1)
one() increments j (j = 1)
two() loads j (b = 1)