Wil*_*mKF 1 c++ mutex volatile stdatomic sig-atomic-t
如果我在具有原子读取和递增/递减支持的硬件上,我是否可以使用volatile sig_atomic_tC++ 03来访问原子操作并避免使用完整的互斥锁,或者我必须等待C++ 11和std::atomic<int>?
有些编译器提供非标准语义,volatile允许它工作,但它不可移植.  volatile用于访问硬件,而不是用于线程间通信.无法保证volatile一个线程对变量的写入将变得对另一个线程可见 - 对于线程之间的通信,您需要同步操作,例如由std::atomic类型操作提供的内存屏障.
有关更多信息,请参阅"volatile vs. volatile"和Hans Boehm的ISO C++文章"应该是易失性获取原子性和线程可见性语义吗?" (这些链接取自最近Herb Sutter博客文章的脚注)
您不必等待编译器中的C++ 11支持,大多数平台提供一些特定于平台的原子操作,其中还包括任何必要的内存屏障,例如GCC的__sync内置操作,Solaris的原子操作或Win32的Interlocked函数.还有一些可移植的库,例如建议的Boost.Atomic,它为特定于平台的实现提供了一个通用接口.