1. 什么是无锁队列
字面意思理解,就是两个线程同步操作某种数据时,不能加锁;
因为加锁是会拖慢效率,造成延时的;
2. 什么场景需要用到无锁队列呢?
最典型的是生产者和消费者模型,要求生产者生产的同时,进行消费,这就要求足够的低延时,此时可以使用无锁队列;
比如:
线程A生产 1,2,3,4…
线程B对生产出来的数相加,要求效率足够高,不能用锁,此时就可以用无锁队列。
3. 无锁队列的实现
#define MAX_NUMBER 1000 #define OK 0 #define ERROR -1 typedef struct _QUEUE_DATA { int iData[MAX_NUMBER]; int head; int tail; }QUEUE_DATA; QUEUE_DATA* pHead = new QUEUE_DATA; pHead->head = 0; pHead->tail = 0; //从队尾加入数据,队列是一个环形队列 int push_data(QUEUE_DATA* pHead, int data) { if ( pHead == NULL || (pHead->head == ((pHead->tail +1) % MAX_NUMBER) ) ) { return ERROR; } pHead->iData[pHead->tail] = data; pHead->tail = (pHead->tail+1)%MAX_NUMBER; return OK; } int pop_data(QUEUE_DATA* pHead) { if (pHead == NULL || (pHead->head == pHead->tail)) { return ERROR; } pHead->iData[pHead->head] = 0; pHead->head = (pHead->head+1)%MAX_NUMBER; return OK; }