簡體   English   中英

互鎖變量訪問(在布爾值上)和std :: atomic_flag之間的區別

[英]Difference between interlocked variable access (on boolean) and std::atomic_flag

我想知道使用Windows的interlockedXXX函數訪問布爾值和使用std::atomic_flag之間有什么區別。

據我所知,它們都是無鎖的,您不能直接設置或讀取atomic_flag 我想知道是否還有更多差異。

std::atomic_flag基本上用作構建其他同步原語的原語。 如果需要設置或讀取 ,則與std::atomic<bool>進行比較可能更有意義。

但是,還有一些其他(概念上的)差異:

  • 使用interlockedXXX ,您將不會獲得可移植的代碼。

  • interlockedXXX是一個函數 ,而std::atomic_flag (以及std::atomic )是一個type 這是一個很大的區別,因為您可以將interlockedXXX與任何合適的內存位置一起使用,例如std::vector的元素。 相反,您不能創建C ++原子標記或原子布爾的向量,因為相應的類型不符合向量值類型的要求。 1個

您可以在@RmMm創建的代碼中看到后者的區別,其中flag是一個普通變量。 我還添加了一個atomic<bool>的案例,您可能會注意到,這三個變體都產生完全相同的程序集:

https://godbolt.org/z/9xwRV6


[1]這個問題應該由C ++ 20中的std::atomic_ref解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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