(1) only matters for read-only shared data
(2) who accesses what when doesn't matter - it's unsynchronized access
(3) this assumes that (a) the compiler generated accesses to real memory, (b) the cache coherency protocol on a given SMP system doesn't require any special instructions to make writes visible to other processors.

If it runs Windows, you don't have to worry about 3b. You could reach "hacker status" by slapping a volatile on there - which should take care of 3a. But now you have "hacked" code that suggests that C/C++ volatile has something to do with threading or synchronization - which is doesn't. What's worse is that MSVC-volatile (post v14) will generate memory barrier instructions that are relatively expensive - on every access.

It's best to just use the synchronization primitives provided by your threading library.