2012-10-11 65 views

回答

5

一些編譯器爲volatile提供了非標準語義,它將允許它工作,但它不是可移植的。 volatile用於訪問硬件,而不是用於線程間通信。無法保證一個線程對一個volatile變量的寫入將永遠對另一個線程可見 - 對於線程之間的通信,您需要同步諸如內存屏障等操作,這些操作由類型爲std::atomic的操作提供。

欲瞭解更多信息請參閱"volatile vs. volatile"和漢斯·貝姆的ISO C++紙"Should volatile Acquire Atomicity and Thread Visibility Semantics?"

(從腳註送往最近Herb Sutter blog post兩個鏈接)你不必等待在你的編譯器C++ 11的支持,雖然,大多數平臺提供了一些特定於平臺的原子操作,這些操作還包括任何必要的內存障礙, GCC的__sync內置,Solaris的原子操作或Win32的互鎖功能。還有便攜式庫,如提議的Boost.Atomic,它們提供了平臺特定實現的通用接口。

相關問題