C11内存模型

GCC 4.7前,__sync同步原语中默认的内存模型为full barrier模型,__sync原语前后的读写操作均不可做指令重排。为提高流水线执行效率,GCC 4.7合入和C11的内存模型,通过__atomic同步原语,由使用者控制需要的屏障级别。

内存模型

说明

__ATOMIC_RELAXED

对其它读写操作没有同步,只保证本操作是原子的。

__ATOMIC_CONSUME

load操作,当前线程依赖该原子变量的访存操作不能reorder到该指令之前,对其他线程store操作(release)可见。

__ATOMIC_ACQUIRE

load操作,当前线程所有访存操作不能reorder到该指令之前,对其他线程store操作(release)可见。

__ATOMIC_RELEASE

store操作,当前线程所有访存操作不能reorder到该指令之后,对其他线程load操作(consume)可见。

__ATOMIC_ACQ_REL

load/store操作,memory_order_acquire + memory_order_release。

__ATOMIC_SEQ_CST

memory_order_acq_rel + 顺序一致性(sequential consisten)。