linux队列加锁,多线程之无锁队列

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值