一直很好奇atomic是怎么实现的,最近查了一些资料,想开始记录一些东西。
首先开始的就是看源码了,找到的源码中有各种宏定义,看起来有些费力,不过看懂了一些之后,后面的宏就顺眼多了,不多说。
接下来,就找到了一些memory order的问题,之前没深究,总以为这可能是字节序吧,从字面上来看很相近,但是往深了看之后,发现,这不是字节序(byte order, endian)。这里的memory order用内存访问顺序来翻译,或许更贴切一些。
内存访问顺序,也就是内存一致模型(Memory consistency model),在每个内存共享系统中,都需要考虑该模型带来的影响,比如说多线程、网络、总线等。在一个多处理器系统中,由于内存是共享的,如果程序员所期望的内存操作行为与系统实际的内存操作行为不一致时,就需要内存一致模型来弥补这种不一致。通俗一点来讲,对共用的数据,如果会有多个不同的访问者或修改者时,要确保信息数据流的正确性时,都需要用到该模型。以下会慢慢列出各个不同的模型:
- 顺序一致模型(sequential consistency)