【问题标题】:Synchronization in one producer + multiple consumer model with shared memory一个生产者+多消费者模型中的同步,共享内存
【发布时间】:2011-03-12 22:39:13
【问题描述】:

我想在 Unix 中使用共享内存实现一个生产者、多消费者模型
生产者:将数据帧(~char[1024]) 放入内存段
消费者:将数据memcpy到自己的私有内存中并做一些处理

一些相关信息:

  1. 消费者可以错过一些数据帧
  2. 消费者是独立的,例如。如果一个消费者只得到数据 1,2,4,另一个消费者得到 2,3,5 也没关系
  3. 大约 10 个消费者将同时运行
  4. 生产者生成数据的速度比消费者处理数据的速度快
  5. 慢/僵尸消费者不应该减慢整个系统的速度
  6. 如果看到相同的数据,消费者将跳过 memcpy

我已经设置了共享内存的东西,并使用了 pthread 读写锁,但它似乎比使用 tcp 模型慢

我的问题:哪种同步最适合这种模型?

【问题讨论】:

  • “错过一些数据框”是什么意思?一个消费者得到 1,2,4 而另一个得到 2,3,5 究竟是怎么回事?你不介意 2 被处理两次吗?
  • 我不认为这是一个同步问题。 (嗯,确实如此,但解决方案很少而且很简单。)这里更大的问题是调度。
  • 我不确定你是否可以使用 .NET 库,但你需要类似于 ReaderWriterLockSlimRelated question 的东西

标签: c++ synchronization shared-memory


【解决方案1】:

您确定问题出在所使用的同步模型上吗?

我正在考虑其他事情:也许制作人“保留令牌”的时间过长。例如,生产者应该在私有内存中产生 1024 字节,并保留共享内存仅用于写入新数据?

确保关键部分尽可能小。

【讨论】:

    猜你喜欢
    • 2016-09-03
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多