首页 > 代码库 > 多线程编程之无锁队列
多线程编程之无锁队列
关于无锁队列的概念与实现,可以参考博文《无锁队列的实现》,主要涉及到的知识点包括CAS原子操作、无锁队列的链表实现、无锁队列的数组实现以及ABA问题。
下面借鉴了《多线程的那点儿事(之无锁队列)》的代码,说明两个线程(一个添加一个读取数据)之间的无锁队列,可以不借助线程互斥方法就能够达到并行效果。代码如下:
#define MAX_NUMBER 1000L#define STATUS int#define OK 0#define FALSE -1typedef struct _QUEUE_DATA{ int data[MAX_NUMBER]; int head; int tail;}QUEUE_DATA; STATUS push_data(QUEUE_DATA* pQueue, int data){ if(NULL == pQueue) return ERROR; if(pQueue->head == ((pQueue->tail) + 1)% MAX_NUMBER) return ERROR; pQueue->data[pQueue->tail] = data; pQueue->tail = (pQueue->tail + 1)% MAX_NUMBER; return OK;}STATUS pop_data(QUEUE_DATA* pQueue, int* pData){ if(NULL == pQueue || NULL == pData) return ERROR; if(pQueue->head == pQueue->tail) return ERROR; *pData = http://www.mamicode.com/pQueue->data[pQueue->head]; pQueue->head = (pQueue->head + 1)% MAX_NUMBER; return OK;}
小结:
- 无锁队列只适合两个线程并行使用,一个压入数据,一个弹出数据
- 无锁队列是没有锁的并行,没有死锁的危险
- 无锁队列中head和tail只有在计算结束之前的时候才能进行自增运算
多线程编程之无锁队列
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。