多线程之无锁队列

作者: cpp加油站 | 来源:发表于2019-05-28 15:12 被阅读1次

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;
}

相关文章

  • 多线程之无锁队列

    1. 什么是无锁队列 字面意思理解,就是两个线程同步操作某种数据时,不能加锁;因为加锁是会拖慢效率,造成延时的; ...

  • Thread

    队列 线程锁 多线程,线程池 队列 多线程爬虫示例 多线程 自定义线程 线程池

  • 原理剖析(第 012 篇)Netty之无锁队列MpscUnbou

    原理剖析(第 012 篇)Netty之无锁队列MpscUnboundedArrayQueue原理分析 一、大致介绍...

  • iOS 周刊 第一期

    一.多线程安全方案 1.用同步锁,但是很影响性能 2.用NSLock,也是锁机制 3.用派发队列,在并行队列里面,...

  • GCD练习

    GCD练习 ios 多线程 GCD : ios 多线程 全剧队列,异步执行 线程间通信 信号量 文件锁 单利模式 ...

  • python之多线程与多进程入门

    python之多线程与多进程 关键词: GIL锁,IO繁忙,线程安全,线程同步,进程池,进程通信,队列 GIL锁;...

  • 多线程:同步、锁、队列

  • 【译】GCD并发队列(GCD Concurrent Queues

    这是GCD介绍的第三篇文章。 如果说串行队列可以很好的替代互斥锁,那么并发队列就可以很好的替代多线程。 并发队列允...

  • Python3 多线程执行顺序的可行方案

    保持多线程执行顺序的可行方案有以下几种: 锁,Condition,信号量,Event,Barrier,队列 示例代...

  • 队列和线程

    [iOS多线程中,队列和执行的排列组合结果分析] 多线程中的队列有:串行队列,并发队列,全局队列,主队列。 执行的...

网友评论

    本文标题:多线程之无锁队列

    本文链接:https://www.haomeiwen.com/subject/bkddtctx.html