【发布时间】:2013-07-29 20:55:34
【问题描述】:
我想设计一个执行以下操作的多线程应用程序: 一个线程顺序写入循环缓冲区。然后会有n个读取线程等待由写入线程发起的某个信号以唤醒并从循环缓冲区中读取。信号应该以某种方式包含一个整数值,该值表示要读取的循环缓冲区偏移量。这可以在 c++ 中完成吗? 任何帮助将不胜感激。
由于我想要一个能够处理尽可能接近高速、实时流量的设计,因此我想消除任何内存分配/解除分配。因此,循环队列将是在启动时分配的连续内存块。我不确定你所说的排队是否符合这个。
生产者只需在每次有内容要写入时跟踪从哪里开始写入循环缓冲区字节数组。 所以我真正要求的是生产者在完成包含写入循环缓冲区中的最后一个字节的位置(偏移量)的写入事件时传播“信号”的方法。这将避免需要锁定机制。
当接收到这个“传播的”信号/事件时,消费者线程将被唤醒。他们自己只需要跟踪他们离开的地方,然后只需阅读直到信号偏移值。 最后,生产者和消费者当然需要知道循环缓冲区从哪里开始以及它有多大,以便他们知道何时包装。
【问题讨论】:
-
您应该向我们展示您的尝试并描述其行为与您的期望有何不同。