我正在寻找一个关于释放栅栏和原子获取操作的同步示例。我发现的所有发布栅栏的例子都是栅栏-栅栏同步。
发布于 2021-01-08 09:47:39
这很简单..您可以一起使用发放栏和获取操作,如下所示:
int main()
{
int x = 0;
std::atomic<bool> flag{false};
std::thread t1{[&]
{
x = 42;
std::atomic_thread_fence(std::memory_order_release);
flag.store(true, std::memory_order_relaxed);
}};
std::thread t2{[&]
{
if (flag.load(std::memory_order_acquire))
{
assert(x == 42); // cannot fire
}
}};
t1.join(); t2.join();
}请注意,必须在发布栅栏之后对松弛的存储进行排序。
https://stackoverflow.com/questions/65615293
复制相似问题