> you can’t get so called out-of-thin-air values
You can't get out-of-thin-air primitive values (no word tearing).
But you can still observe states that cannot be explained by any possible sequential interleaving of your program. E.g. your program can do:
a = 0;
b = 0;
a = 1;
b = 1;
and another thread that does:
print(b)
print(a)
may observe 4 different combinations of values, surprisingly including also this one: { a = 0, b = 1 }
Why a corruption at a structure level should be considered less serious than tearing at a word level?