我有一个内存变量在线程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。只有当它仍然是错误的,请检查柜台。 –
读者多久访问一次?这似乎是不成熟的优化。 –