簡體   English   中英

我可以使用volatile sig_atomic_t避免C ++ 03中的互斥嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM