我有一个在线程 A 中更新并在其他线程中读取的内存变量。读者只关心值是否非零。我保证一旦值增加,它就永远不会回到零。如下优化有意义吗?换句话说,在读者方面,一旦我满足了我的条件,我就不需要“围栏”。
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);
}