[英]Can I use volatile sig_atomic_t to avoid a mutex in C++03?
如果我使用的是具有原子讀取和增量/減量支持的硬件,那么我可以在C ++ 03中使用volatile sig_atomic_t
來訪問原子操作並避免完全吹滅的互斥量volatile sig_atomic_t
,或者必須等待C ++ 11和std::atomic<int>
嗎?
一些編譯器為volatile
提供了非標准的語義,這將使其能夠正常工作,但它不是可移植的。 volatile
用於訪問硬件, 而不用於線程間通信。 不能保證一個線程對volatile
變量的寫操作對另一個線程來說是可見的-對於線程之間的通信,您需要同步操作,例如std::atomic
類型的操作提供的內存屏障。
有關更多信息,請參見“易失性與易失性”和Hans Boehm的ISO C ++論文“易失性是否應獲取原子性和線程可見性語義?” (兩個鏈接均從腳注中摘錄到最近的Herb Sutter博客文章 )
但是,您不必等待編譯器中的C ++ 11支持,大多數平台都提供了一些特定於平台的原子操作,其中還包括任何必要的內存屏障,例如GCC的__sync
內置,Solaris的原子操作或Win32的互鎖職能。 還有一些便攜式庫,例如建議的Boost.Atomic ,它們為平台特定的實現提供了公共接口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.