store(x,std :: memory_order_relaxed)与直接分配值之间的区别

时间:2020-05-16 11:49:53

标签: c++ atomic

对于下面的代码,只有写操作,没有读-修改-写操作,storestd::memory_order_relaxed和直接赋值之间有什么区别吗?

std::atomic<int> x;
int y;

x.store(123, std::memory_order_relaxed)
y = 123

1 个答案:

答案 0 :(得分:1)

据我所知,内存排序仅在多个上下文中相关 load() / store()操作。
很难就可能存在的差异给出准确的答案。 仅显示store()操作之前/之后可见。

根据 https://en.cppreference.com/w/cpp/atomic/memory_order
memory_order_relaxed”没有同步或排序约束 强加于其他读取或写入,仅保证此操作的原子性”

因此,store()std::memory_order_relaxed之间的唯一区别 一个简单的任务就是保证的原子性

话虽这么说,当谈到平台的特殊性时, 我们经常会观察到,即使是整数的简单赋值 是原子的(即它不会先更改几个字节,然后再更改其他几个字节) 以其他线程可以看到的方式)。
但是C ++标准并不能保证 硬件可以为此决定采取不同的行为。

相关问题