【摘要】本文介绍单生产者单消费者模型的队列。根据写入队列的内容是定长还是变长,分为单生产者单消费者定长队列和单生产者单消费者变长队列两种。单生产者单消费者模型的队列操作过程是不需要进行加锁的。生产者通过写索引控制入队操作,消费者通过读索引控制出队列操作。二者相互之间对索引是独享,不存在竞争关系。...
分类:
其他好文 时间:
2015-07-24 20:51:12
阅读次数:
154
一直想写一个无锁队列,为了提高项目的背景效率。有机会看到linux核心kfifo.h 原则。所以这个实现自己仿照,眼下linux我们应该能够提供外部接口。#ifndef _NO_LOCK_QUEUE_H_#define _NO_LOCK_QUEUE_H_#include #include #incl...
分类:
系统相关 时间:
2015-06-18 16:50:16
阅读次数:
164
一直想写个无锁的队列,来提高项目后台的效率。
偶然看到linux内核的kfifo.h 实现原理。于是自己仿照了这个实现,目前linux应该是可以对外提供接口了。
#ifndef _NO_LOCK_QUEUE_H_
#define _NO_LOCK_QUEUE_H_
#include
#include
#include
#include
#include
#include
...
分类:
系统相关 时间:
2015-06-15 16:25:20
阅读次数:
411
对无锁队列的最初兴趣来自梁斌同志的一个英雄帖:http://coderpk.com/。第一次看到这个题目的时候还不知道CAS,FAA等所谓的“原子操作”,但直觉上感觉,通过对读写操作的性能优化来达到大幅提高队列性能的方法是行不通的,就算读写操作全用汇编来写,也不会和正常的read及write有数量级...
分类:
编程语言 时间:
2015-04-26 10:42:57
阅读次数:
398
一哥们翻译的boost的无锁队列的官方文档原文地址:http://blog.csdn.net/great3779/article/details/8765103Boost_1_53_0终于迎来了久违的Boost.Lockfree模块,本着学习的心态,将其翻译如下。(原文地址:http://www.b...
分类:
其他好文 时间:
2015-04-25 16:36:13
阅读次数:
142
/*
* RingBuf.h
*
* Created on: Feb 7, 2015 6:06:10 PM
* Author: xuzewen
*/
#ifndef RINGBUF_H_
#define RINGBUF_H_
#include
/**
*
* 多/单线程生产, 只能单线程消费, 尺寸固定为0x10000.
*
* */
class RingBu...
分类:
其他好文 时间:
2015-03-20 14:29:16
阅读次数:
206
共享内存现在使用环形队列,以前使用boost的那一套,难以看懂,现在直接改成环形队列简单多了,将环形队列的头和尾放入共享内存中,也是安全的和内存池的实现差不多,都是先分配好,然后放入队列中,只是这个是环形队列,而那个是无锁队列,具体哪个队列的效率高,个人感觉还是环形队列的效率高然后再外层再搞个环形队...
分类:
其他好文 时间:
2015-03-18 12:02:06
阅读次数:
124
作为C++11 STL参考实现的boost库,不仅支持11标准,而且做了许多扩展,掌握其使用方法,对于提高代码质量,尤其重要。以其多线程并行无锁队列为例,结合代码和说明,演示了无锁boost库的使用和编译方法。...
分类:
编程语言 时间:
2015-01-31 07:13:32
阅读次数:
421
rte_ring是一个无锁队列,无锁队列的出队入队操作是rte_ring实现的关键。因此,本文主要讲解dpdk是怎样使用无锁机制实现rte_ring的多生产者入队操作。 rte_atomic32_cmpset()称为CAS(compare and set)操作,是无锁队列实现的关键,实现的伪代码如下...
分类:
其他好文 时间:
2015-01-24 18:43:29
阅读次数:
928
在之前的两篇博客(线程安全的无锁RingBuffer的实现,多个写线程一个读线程的无锁队列实现)中,分别写了在只有一个读线程、一个写线程的情况下,以及只有一个写线程、两个读线程的情况下,不采用加锁技术,甚至原子运算的循环队列的实现。但是,在其他的情况下,我们也需要尽可能高效的线程安全的队列的实现。本...
分类:
编程语言 时间:
2015-01-11 22:47:53
阅读次数:
307