原子类型是对编译器和硬件访问内存的限制,保证在同一时间内对原子类型内存的操作只有一个。除此之外,可以指定原子类型的访问顺序,以限制编译器和硬件修改对内存的访问顺序(对于单线程是一种优化,对于多线程可能导致数据竞争)。

这里,只对原子访问的顺序做一个归纳:

  • Relaxed,允许编译器和硬件修改指令顺序。
  • Release,阻止编译器和硬件将之前的指令重排到原子类型之后,在原子类型之前形成内存屏障,在原子类型之后释放内存屏障,用于写。
  • Acquire,阻止编译器和硬件将之后的指令重排到原子类型之前,在原子类型之后形成内存屏障,用于读。
  • AcqRel,写时 Release 语义,读时 Acquire 语义,用于读写。
  • SeqCst,保证指令顺序与代码顺序一致,不知道怎么做时,用这个来保证程序的准确性。

感兴趣的朋友可以继续查看下面的资料:

最后修改:2024 年 05 月 27 日
如果觉得我的文章对你有用,请随意赞赏