KFIFO无锁队列
来源:互联网 发布:网上上课软件免费 编辑:程序博客网 时间:2024/06/06 09:48
linux内核中实现了以非常漂亮的无锁队列,在只有一个读者和一个写者的情况下,无需上锁,而拥有线程安全的特性,使得性能相比于加锁方式实现的队列提升数倍
KFIFO的分析可见http://blog.csdn.net/chen19870707/article/details/41083183
这位作者讲的很清楚
KIFIO可以实现无锁队列,但是为什么可以实现呢,通过这种方式为什么可以线程安全?换句话说,平时实现的为什么会产生问题?
linux内核实现中有几个trick
1、sbuffer ize设置为2的n次幂
2、使用&(szie-1)代替求余
3、使用整数自动溢出构成的一个环替代循环数组,最大的好处是判断满和空简单多了
4、先操作后计数的方法
回到问题?直接实现的队列为什么没有线程安全特性
造成数据混乱自然是多线程同时修改读指针和写指针造成,最重要的一点是先修改指针然后读取数据,如果修改完指针以后,线程被切换,而此时却没有成功的把数据复制过去或者没有复制完整,那么刚好取得当前不成功存入的或还没有存入的数据,那么就造成了线程不安全
而KFIFO中,那么多的trick,我认为能够产出线程安全的一个就是调换改变指针和输入\输出数据的顺序。
在输入\输出指针没有真正改变之前,始终无法真正的读取到当前的值,而一旦指针改变。那么读取也就安全了。
0 0
- KFIFO无锁队列
- kfifo无锁队列分析
- 并发无锁队列UnlockQueue(单生产者单消费者kfifo)
- linux 内核 队列 kfifo
- 内核数据结构之队列-kfifo
- 内核数据结构之队列----kfifo
- linux内核之kfifo队列
- kfifo
- kfifo
- kfifo
- 基于kfifo的内核无锁(Lock-free)驱动的实现
- Linux 内核的队列实现--kfifo
- Linux 内核的队列实现--kfifo
- Linux内核队列——kfifo
- 无锁环形队列
- 无锁队列
- 无锁队列实现
- 无锁队列
- 形状类族的中的纯虚函数
- 设计模式
- 【JZOJ 3397】 雨天的尾巴
- Backbonejs之model
- JavaWeb开发-MD5加密算法(直接使用java中的MessageDigest)
- KFIFO无锁队列
- arm B和BL指令+系统引导程序start.s浅析
- 4G频段区域区分
- 2015第七届蓝桥杯决赛C语言A组--穿越雷区(DFS)
- Android20之外部存储
- HDU 1418 抱歉 (欧拉公式)
- 九度 OJ 1051:数字阶段求和
- Ionic 常见问题及解决方案——留着给自己解解惑~~
- Jstorm 集群搭建过程及一键安装部署脚本