From what I understand, the 'volatile' modifier in C# has two effects:
On x86 / amd64, (1) is irrelevant. Those processors don't require fences for volatile semantics. (ia64 is different, though.)
So, we are down to (2). But, for examples that I tried, volatile does not make any difference to the jit-ted assembly.
My question is: Can you give an example of a C# code sample where adding a 'volatile' modifier on a field results in different jit-ted assembly code?
Maybe this is what you are looking for.
Marc Gravell has an repeatable example of how the lack of a volatile keyword can cause problems.
It's also discussed here.
It's worth noting (as Marc does) that the compiler optimisations are only seen when compiled in Release mode.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With