[英]Is there an atomic |= operation?
有沒有原子|=
或原子或? 如果沒有什么建議的技術來設置需要線程安全的變量中的位? (我在避免鎖)
在C ++ 03中沒有這樣的東西,但您可以使用供應商特定的功能。 例如,您可以在Windows上使用InterlockedOr
。 在C ++ 0x中,您可以使用atomic_fetch_or
。
請注意,原子操作也需要鎖定,盡管它在硬件級別上仍然很昂貴。
您可以使用原子比較和交換(CAS),可以在任何您可能需要的地方使用它,來制作幾乎任何操作的原子版本。
看一下_InterlockedOr
內在函數。 這是你可能獲得的最快。
在當前的C ++標准中,沒有這樣的想法 - 但是C ++ 11將會在秋季發布。 見: http : //www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1401.pdf
我不確定,是否已有編譯器支持即將推出的C ++標准的新線程設施的部分內容。 否則你需要做一個解決方法(例如使用Boost)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.