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