我有一個內存變量在線程A中更新並在其他線程中讀取。讀者只關心該值是否爲非零。我保證一旦數值遞增,它就不會回到零。 如下優化是否有意義?換句話說,在讀者方面,一旦我的條件得到滿足,我就不需要「圍欄」。C++原子加載排序效率
std::atomic<int> counter;
writer:
increment()
{
counter.store(counter+1, std:memory_order_release)
}
reader:
iszero()
{
if (counter.load(std::memory_order_relaxed) > 0) return false;
// memory fence only if condition not yet reached
return (counter.load(std::memory_order_acquire) == 0);
}
計數器可能會回到零。 –
在reader :: iszero()中有一個線程局部布爾值並將其設置爲true,以便您第一次從計數器獲得非零值。如果是這樣,立即返回false。只有當它仍然是錯誤的,請檢查櫃檯。 –
讀者多久訪問一次?這似乎是不成熟的優化。 –