[英]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>
的案例,您可能會注意到,這三個變體都產生完全相同的程序集:
[1]這個問題應該由C ++ 20中的std::atomic_ref
解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.