__ATOMIC_RELAXED是什么意思?

Bio*_*441 4 multithreading gcc

在GCC原子内置我发现__atomic_exchange功能确实有第三个参数INT memorder,这可能需要的一个值__ATOMIC_RELAXED__ATOMIC_SEQ_CST__ATOMIC_ACQUIRE__ATOMIC_RELEASE,和__ATOMIC_ACQ_REL

__ATOMIC_RELAXED:暗示没有线程间排序约束。

我不确定怎么会发生,这不是原子操作,因此不会有任何线程间排序吗?

Kon*_*rov 5

所有这些内置函数都对应于新的C11标准原子性功能。标准包含对memory_order_relaxed排序模型的完美说明和一些示例(请参阅7.17.3 / 14)

// Thread 1:
r1 = atomic_load_explicit(&y, memory_order_relaxed);
atomic_store_explicit(&x, r1, memory_order_relaxed);

// Thread 2:
r2 = atomic_load_explicit(&x, memory_order_relaxed);
atomic_store_explicit(&y, 42, memory_order_relaxed);
Run Code Online (Sandbox Code Playgroud)

允许生成此代码,r1 == 42 && r2 == 42.因为线程2中的y存储可能在装入r2之前重新排序。