生产者进程和消费者进程怎样同时访问共享内存里的多个缓冲区

是学生上课还是实际做项目?如果是实际的项目,为什么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 那顺序就无法保证了


    推荐阅读