From dankwiki

When multiple execution contexts want to share data, synchronization must typically be used to ensure mutual exclusion among those accesses. Care must be taken in the presence of constructed operations (64-bit math on a 32-bit processor, for instance), memory access reordering, and compiler optimizations if this synchronization is to be effective and robust.

See Also