我想知道您是否有 2 个线程正在使用 memory_order_acquire 进行加载,而一个线程正在使用 memory_acquire_release 进行存储,负载是否只会与执行负载的两个线程之一同步?意思是它只能与其中一个线程同步以进行存储/加载,或者您可以让多个线程进行同步加载,而单个线程进行存储。在研究它是一对一的关系后似乎就是这种情况,但读取-修改-写入操作似乎是链式的,见下文。
如果线程正在执行像 fetch_sub 这样的读取-修改-写入操作,它似乎工作正常,那么即使 reader1_thread 和 reader2_thread 之间没有同步关系,这些似乎也会有一个链式释放
std::atomic<int> s;
void loader_thread()
{
s.store(1,std::memory_order_release);
}
// seems to chain properly if these were fetch_sub instead of load,
// wondering if just loads will be synchronized as well meaning both threads
// will be synched up with the store in the loader thread or just the first one
void reader1_thread()
{
while(!s.load(std::memory_order_acquire));
}
void reader2_thread()
{
while(!s.load(std::memory_order_acquire));
}