实现一个无锁消息队列
目标
实现一个多读多写的无锁消息队列。
cmpxchg - 比较并替换
比较并替换(compare-and-swap, CAS)是一个用于多线程同步的原子操作。
其工作流程是:
def cmpxchg(val, oldval, newval):
if val == oldval:
val = newval
return True
return False
也就是说,只有当val
等于oldval
时,我们才会将val
的值替换成newval
。在多线程的场景下,cmpxchg用来保证多线程写的原子性。
例如,线程1和线程2都要写入val
变量,但是我们需要保证只有一个线程能写成功。使用cmpxchg,能保证只有一个线程能成功的将val
变量替换成新值,写失败的线程会得到False
的返回值。
ACCESS_ONCE - 消除优化歧义
#define …