无锁队列相对有锁队列的改进之处在于__sync_bool_compare_and_swap是基于CPU的原子操作,相对于基于内核的锁机制,耗时更少,效率更高;
做过简单的测试,24个线程,每个线程push 100W个数,最后全部输出,有锁队列耗时是无锁队列的4倍左右。
QueueNoLock.h
#ifndef QUEUE_NOLOCK_H_
#define QUEUE_NOLOCK_H_
#include <stdlib.h>
#include <string.h>
#define UINT unsigned int
typedef struct _queuetask_s QUEUETASK_S;
struct _queuetask_s{
void *_pvData;
int _iLen;
QUEUETASK_S *_pNext;
};
class CQueueNoLock{
public:
CQueueNoLock();
virtual ~CQueueNoLock();
bool QueueNoLockEmpty();
void* QueueNoLockPop();
void QueueNoLockPush(void* pvTask, UINT uiLen);
private:
QUEUETASK_S *m_pstHead;//头结点
QUEUETASK_S *m_pstTail; //尾节点
};
#endif
QueueNoLock.cpp
#include "QueueNoLock.h"
CQueueNoLock::CQueueNoLock(){
m_pstHead = (QUEUETASK_S *)malloc(sizeof(QUEUETASK_S));
memset(m_pstHe