多线程的队列循环缓存
来源:互联网 发布:win7网络0个对象 编辑:程序博客网 时间:2024/05/29 09:19
应用场景
程序开发中经常遇到一种情况:一个线程收数据(例如socket->recv),一个线程处理数据。
这种情况下,我通常的处理方式是一个公共的buff、一个锁,接收线程收到数据后,加锁拷贝内存记录偏移。另一个线程判断偏移大于零时呢,加锁,内存拷贝出来,然后处理。
这时就设计,需要加锁,如果高速数据接收(如万兆网),可能导致接收不及时丢包。
进而需要设计一种无锁的缓存
无锁缓存
思路
1.一个接收数据线程,一个处理数据线程
2.定义100个10M的缓存,每个缓存有一个枚举值状态,包括:空、在写入、在读取
3.这样的话,收数据线程,跟这个100个缓存的状态往里面写,数据处理线程,根据100个缓存的状态处理
4.这样达到没有锁的效果
具体的缓存个数,缓存大小可以根据实际需要定义。
缓存队列使用的话,应该顺序使用,到队列头部,然后从头开始,若缓存状态为在读入,那么说明处理数据太慢,数据处理不过来,应该有异常上报机制。
代码
strcut{enum bufState{empty,writeing,reading;};buffState st;char * buff;int offset;} buff;buff buffQue[100];createBuffQue();
0 0
- 多线程的队列循环缓存
- 多线程读取循环队列的实现
- 循环队列,支持多线程
- 一个支持多线程同步循环队列的实现
- 队列----循环队列的实现
- 循环队列的操作(循环队列)
- 循环队列的测试
- 循环队列的程序
- 循环队列的操作
- 循环队列的实现
- 循环队列的改进
- 循环队列的实现
- C的循环队列
- 循环队列的实现
- 循环队列的代码
- 循环队列的实现
- 循环队列的实现
- 不一样的循环队列
- Windows 窗口类型
- Jquery
- Android系统中Bitmap是否有调用recycle方法的必要性
- Unity 中关于获取到物体的方式
- 学习WCF之路4:ChannelFactory的使用
- 多线程的队列循环缓存
- Debian desktop share diretories or files
- quartz基于注解的简单使用demo
- Java 7 的新特性一览表
- 断点续传 scp rsync
- iOS-圆角设置性能优化
- Finding the type of a Tk widget
- Android studio简单设置
- 网页设计IE兼容 浏览器兼容小论