我有很多数据要分发给许多不同的线程。此数据来自单个线程。消费线程可以同时安全地访问容器。
数据需要每隔 delta 秒(50ms < delta < 1)合并到容器中,在此期间需要锁定消费线程,但不要阻塞。类似地,当数据生产者想要合并数据时,它应该等到所有读取线程完成(这应该很快),但没有其他人应该开始读取,因为更新需要尽快发生。
我在 Linux 上工作(平台特定的解决方案非常好/预期)并且我关心每一毫秒。我应该使用什么样的锁定机制,或者是否有更好的模型来解决这个问题?
最佳答案
如果只有一个数据生产者线程并且不考虑内存,您可能需要考虑使用合并和交换算法。
在其中,写入线程创建数据结构的拷贝,同时读取者继续使用原始数据结构,合并新的更改,然后在互斥锁或临界区(或读取器/写入器锁)中执行两个结构的交换.如果你的Unix platform supports interlocked exchange as an atomic operation ,您可以执行无锁交换,通过它们的实现最大化读取吞吐量。
关于c++ - 一个线程提供数据,多个线程消耗数据的最快实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1563409/