无锁编程--环形缓冲区

来源:互联网 发布:php开发培训班 编辑:程序博客网 时间:2024/05/24 02:43

无锁编程--环形缓冲区  

2012-08-17 00:03:27|  分类:webgame |  标签: |举报|字号 订阅

内核无锁第四层级 — 免锁

环形缓冲区是生产者和消费者模型中常用的数据结构。生产者将数据放入数组的尾端,而消费者从数组的另一端移走数据,当达到数组的尾部时,生产者绕回到数组的头部。

如果只有一个生产者和一个消费者,那么就可以做到免锁访问环形缓冲区(Ring Buffer)。写入索引只允许生产者访问并修改,只要写入者在更新索引之前将新的值保存到缓冲区中,则读者将始终看到一致的数据结构。同理,读取索引也只允许消费者访问并修改。


图 2. 环形缓冲区实现原理图
图 2. 环形缓冲区实现原理图 

如图所示,当读者和写者指针相等时,表明缓冲区是空的,而只要写入指针在读取指针后面时,表明缓冲区已满。

 

参考:

透过 Linux 内核看无锁编程 http://www.cnblogs.com/feisky/archive/2012/07/29/2613915.html

生产者/消费者模式:双缓冲区:http://www.cnblogs.com/feisky/archive/2012/07/29/2613915.html

 

0 0