前言
前文介绍了六种内存顺序,以及三种内存模型,本文通过代码示例讲解六种内存顺序使用方法,并实现相应的内存模型。
一、通过内存序实现顺序模型
1、Relaxed Ordering
memory_order_relaxed表示“最宽松的内存序”,不提供任何同步保证。具体来说,memory_order_relaxed仅保证原子操作本身是原子的,但不保证操作之间的顺序。
在
memory_order_relaxed的语义下,编译器和处理器可能会对原子操作进行重排序,以提高性能。在多线程环境中,使用memory_order_relaxed的原子操作可能会产生不可预测的结果,因为线程之间的操作顺序可能会因为重排序而发生变化。例如:
std::atomic<bool> x, y;
std::atomic<int> z;
void write_x_then_y() {
x.store(true, std::memory_order_relaxed); // 1
y.store(true, std::memory_order_relaxed); // 2
}
void read_y_then_x() {
while (!y.load(std::memory_order_relaxed)) {
// 3
std::cout << "y load false" << std::endl;
}
if (x.

最低0.47元/天 解锁文章
3322

被折叠的 条评论
为什么被折叠?



