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