多个读者可以通过 acquire/release 顺序与相同的作者同步吗?

Can multiple readers synchronize with the same writers with acquire/release ordering?

阅读“并发实践”后,我找不到一个问题的答案 - 当我们在一个原子变量上有一个存储(发布)和多个加载(获取)时,标准是否保证读取副作用? 假设我们有:

int i{};
atomic<bool> b{};

void writer(){
 i=42;
 b.store(true,memory_order_release);
}

void reader(){
 while(!b.load(memory_order_acquire))
    this_thread::yield();
 assert(i==42);
}
//---------------------
thread t1{writer},t2{reader},t3{reader};

如果我们只有一个 reader,没问题,但是我们可以在 t2 或 t3 线程中断言失败吗?

这是 writer 中到 i 的存储与两个 reader 线程中来自 i 的负载之间的先行关系的教科书示例.

涉及多个读者并不重要。 b 的存储与所有观察到更新值的读者同步(由于循环,这最终会发生)。

我想你要找的报价是:

An atomic operation A that performs a release operation on an atomic object M synchronizes with an atomic operation B that performs an acquire operation on M and takes its value from any side effect in the release sequence headed by A.

并没有说这个仅限于单次加载操作