生产者进程和消费者进程怎样同时访问共享内存里的多个缓冲区
是学生上课还是实际做项目?如果是实际的项目,为什么TCP不满足需求?
■网友
这种需求应该是用lock free队列。而且1写1读的lock free队列实现并不太难。如果自己没把握写得对,那就直接在网上找这些库吧。
■网友
这个问题有一个简单有效的解决办法:生产者消费者队列里面仅仅管理指针,大家操作队列时是互斥的,但修改指针的时间非常短暂,因此并发性依旧可以很好。拿你前面的例子来说,具体的方案可以如下:假设你有100个缓冲区,编号为1..100,首先有一个full的队列,初始为空,一个empty队列,初始内容为1..100,P从empty取缓冲区,取到编号为n的缓冲区后,操作n缓冲区,完成之后把n缓冲区放到full队列中。C从full取缓冲区,取出缓冲区k,操作k缓冲区,完成之后把k放到empty队列。互斥操作仅仅限于存取一个int,不会限制并发;同时不会发生两个进程同时操作同一个缓冲区的情况。如果你的共享缓冲区数量多于生产者数量,那么事情可以简化,保持一个空闲的缓冲区列表,P与C互斥的访问该空闲列表,进行缓冲区的申请与释放操作,然后用经典的方式操作生产者消费者队列里的指针就可以了。
■网友
首先你应该考虑陈硕大神的建议。然后,你可以考虑降低锁粒度。
■网友
刚好再看Modern Operating Systems P128缓冲区的作用主要是保证事件处理的顺序吧如果只有缓冲区 size =1 那顺序就无法保证了
推荐阅读
- 雪乡烤肠卖15元一根引热议,媒体:定价要以消费者评价为准绳
- 唯品会无搜索模式真的能让大众消费者驻留页面更长时间吗
- 一场家具展,怎样让进去逛的消费者第一眼落在你的产品上
- 本田凌派|丰田三缸机终于来了!消费者会买账吗?
- 趣头条|将消费者放首位,威马起火主动召回态度引好评
- 车市速递|中期改款长和高有变化,新款指南者能否俘获更多消费者的心?
- 蛋糕|网购小蛋糕发霉 消费者索赔千元
- 黑五|
- 中消协|回应“燕窝变糖水”事件 中消协专家教你做精明消费者
- 车毂辘|《消费者报告》可靠性排名,别克丢车保帅,马自达一鸣惊人?
