对于下面的代码,只有写操作,没有读-修改-写操作,store
与std::memory_order_relaxed
和直接赋值之间有什么区别吗?
std::atomic<int> x;
int y;
x.store(123, std::memory_order_relaxed)
y = 123
答案 0 :(得分:1)
据我所知,内存排序仅在多个上下文中相关
load()
/ store()
操作。
很难就可能存在的差异给出准确的答案。
仅显示store()
操作之前/之后可见。
根据
https://en.cppreference.com/w/cpp/atomic/memory_order
memory_order_relaxed
:”没有同步或排序约束
强加于其他读取或写入,仅保证此操作的原子性”
因此,store()
与std::memory_order_relaxed
之间的唯一区别
一个简单的任务就是保证的原子性。
话虽这么说,当谈到平台的特殊性时,
我们经常会观察到,即使是整数的简单赋值
是原子的(即它不会先更改几个字节,然后再更改其他几个字节)
以其他线程可以看到的方式)。
但是C ++标准并不能保证
硬件可以为此决定采取不同的行为。