MSDN docs for MS-dependent precarious situation are fully reverting to VS2003. So it was a while - long before std::atomic existed in C ++ 11.
Thus, MS-specific vulnerability, it seems that in previous years the semantics of receive / release was achieved. But now itβs basically out of date, and they left a footnote pushing you away from MS-volatile in favor of std::atomic and /volatile:iso for cross-threading.
As to why they exclude ARM, Microsoft did not build ARM until relatively recently. Besides ARM, they support x86, x64 and Itanium (which is dead).
On x86 and x64, most downloads and repositories already have receive / release semantics (with exceptions such as non-temporary repositories). Therefore, as long as the compiler does not reorder anything, the processor will not * and therefore retains the semantics of receive / release. The /volatile:ms flag instructs the compiler not to reorder, so that receive / release semantics can be achieved on x86 and x64.
Since Microsoft ARM support is relatively new, and MS-dependent volatile ( /volatile:ms ) is deprecated in favor of std::atomic , they probably decided to abandon the classic mutable semantics rather than updating it to work with ARM (which probably would mean the widespread use of memory barriers, given the lack of hardware support).
* The processor will continue to make any changes that it wants, but it will retain the semantics of receiving / releasing the program as long as it is required for x86 / x64. (except in exceptional cases, such as nt stores or clflush). How this happens without disturbing the memory order is another topic.
source share