比方说,我们有这样的一段代码,这是正确的(我希望至少):组合原子和非原子变量和缓存
std::atomic<int> a;
std::atomic<bool> ready{false};
void threadA() {
a.store(666, std::memory_order_relaxed);
ready.store(true, std::memory_order_release);
}
void threadB() {
while(!ready.load(std::memory_order_acquire));
process(a.load(std::memory_order_relaxed));
}
我的问题是:在这种情况下,你使用的是int a;
代替std::atomic<int> a;
,这是正确的?或者是否存在缓存刷新/失效问题?
如果您必须要求...使用顺序一致性。除非经过严格的评论和封装,即使你明白你在做什么,维护你的代码的人也不会。 –
这不是真的用于特定的用例。对于理论来说,这比理解更多;)。 但是,此代码是否可以与顺序一致性工作? –
对我来说看起来很好。我会鼓励你观看这个叫做“原子武器”的演讲。这一切对我来说都是有意义的。 https://www.youtube.com/watch?v=c1gO9aB9nbs –