【发布时间】:2011-03-12 22:39:13
【问题描述】:
我想在 Unix 中使用共享内存实现一个生产者、多消费者模型
生产者:将数据帧(~char[1024]) 放入内存段
消费者:将数据memcpy到自己的私有内存中并做一些处理
一些相关信息:
- 消费者可以错过一些数据帧
- 消费者是独立的,例如。如果一个消费者只得到数据 1,2,4,另一个消费者得到 2,3,5 也没关系
- 大约 10 个消费者将同时运行
- 生产者生成数据的速度比消费者处理数据的速度快
- 慢/僵尸消费者不应该减慢整个系统的速度
- 如果看到相同的数据,消费者将跳过 memcpy
我已经设置了共享内存的东西,并使用了 pthread 读写锁,但它似乎比使用 tcp 模型慢
我的问题:哪种同步最适合这种模型?
【问题讨论】:
-
“错过一些数据框”是什么意思?一个消费者得到 1,2,4 而另一个得到 2,3,5 究竟是怎么回事?你不介意 2 被处理两次吗?
-
我不认为这是一个同步问题。 (嗯,确实如此,但解决方案很少而且很简单。)这里更大的问题是调度。
-
我不确定你是否可以使用 .NET 库,但你需要类似于 ReaderWriterLockSlim 和 Related question 的东西
标签: c++ synchronization shared-memory