On Dec 24, 2013, at 2:24 PM, Andrey Semashev
On Tuesday 24 December 2013 17:17:37 John Maddock wrote:
I'm sure the answer to (a) is that it is correct, but I was surprised that atomic<int> relied on the volatile modifier for thread safe load/stores on MSVC, I had assumed that something more than that would have been required, but I know I'm out of date on this stuff!
"volatile" was changed in VC++ 8.0 to guarantee acquire/release semantics, then changed back in 2012 to only do so when /volatile:ms is active, which it is by default, except on ARM.
So does this mean that Boost.Atomic is perhaps not safe after all?
No, it's perfectly safe on x86. It is also safe on ARM if /volatile:ms is specified.
How do you ensure the use of /volatile:ms? Can users build Boost with /volatile:iso? ___ Rob (Sent from my portable computation engine)