假设我们有一段代码,它是正确的(至少我希望如此):
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; ,也正确吗?或者是否存在缓存刷新/失效问题?
int a;
std::atomic<int> a;
不管这是不是一个好主意,例如,您的代码很好。。
您可以替换原子类型的 a int C++标准用以下短语(§1.10.1-6)支持您的情况:
a
int
自从 threadB 加载的值 ready 存储人 threadA (它正在循环中等待它) 与同步 关系已建立。 因此 a.load() a.store() . 另一种说法是 发生在之前
threadB
ready
threadA
a.load()
a.store()