I have a small test application that executes two threads simultaneously. One increments a static long _value, the other one decrements it. I\'ve ensured with
The CLR memory model guarantees (requires) that loads/stores can't cross a fence. It's up to the CLR implementers to enforce this on real hardware, which they do. However, this is based on the advertised / understood behavior of the hardware, which can be wrong.