An issue with operations on 64 bit value not being atomic on 32 bit machines
On 32 bit machines, only 32 bits are written at a time.
If you are writing a 64 bit value on a 32 bit machine, and writing to the same address at the same time on two different threads, you actually have four writes, not two, because the writes are done 32 bits at a time.
It is therefore possible for the threads to race, and when the smoke clears the variable contains the top 32 bits written by one thread, and the bottom 32 bits written by the other. So you can write 0xDEADBEEF00000000 on one thread and 0x00000000BAADF00D on another, and end up with 0x0000000000000000 in memory.
See this question for a code sample displaying tearing in C#.