gpt4 book ai didi

c++ - 了解 std::atomic 内存屏障

转载 作者:行者123 更新时间:2023-11-30 05:16:45 25 4
gpt4 key购买 nike

我想了解 C++ 中的内存屏障是如何工作的。例如,我在那种情况下使用 std::atomic:

#include <iostream>
#include <atomic>

int main()
{
std::atomic<int> a;
int n = load();//returns 1 or other value written by other thread
a.store (n, std::memory_order_release);
}

上面的代码在语义上是否等同于下面的代码?

#include <iostream>
#include <atomic>
int main()
{
std::atomic<int> a;
int n = load();
std::atomic_thread_fence(std::memory_order_release);
n = 100;//assume assignment is atomic
}

如果我是对的,我能确定所有可以接受内存屏障作为参数的 C++ 函数的行为都是相同的吗?

最佳答案

不,但它等同于:

#include <iostream>
#include <atomic>
int main()
{
std::atomic<int> a;
int n = load();
std::atomic_thread_fence(std::memory_order_release);
a.store (12345, std::memory_order_relaxed);
n=100;
}

(尽管该值与您在此处所做的值不同)。栅栏内必须有一个原子存储。查看条件here在“栅栏-栅栏同步”或“栅栏-原子同步”下。虽然您没有对存储 a 设置任何限制,但它将在 memory_order_release 内,n 也是如此。这就是栅栏的作用。

关于c++ - 了解 std::atomic 内存屏障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42486847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com