一、什么是多线程无锁队列?
多线程无锁队列还是有锁的,只不过是用了cpu层面的CAS原子操作,用到这个操作,只需要在取队列元素和添加队列元素的时候利用CAS原子操作,就可以保证多个线程对队列元素的有序存取;
二、什么是CAS操作?
CAS = Compare & Set,或是 Compare & Swap;
在windows和Linux平台均有系统api函数,同时在c++11中也有实现;
//下面这个函数操作在CPU层面是原子操作,这是实现无锁队列的基础;
//这个函数的意思是:只有当dest的只和accum的值相等的时候,才将newval赋值给accum;
//到现在你还是无法理解,为什么这个操作就可以实现多线程对队列元素的有序操作了呢?
bool
compare_and_swap (
int
*accum,
int
*dest,
int
newval)