在Qt应用程序中,我需要从一个线程添加项目,并从另一个线程中使用它们。正如Qt文档所述的容器类:
...在将它们用作只读的情况下,它们是线程安全的 用于访问它们的所有线程的容器。
我假设我需要创建一个线程安全版本,或者用互斥锁保护它。有没有推荐的解决方案?比如直接使用Qt事件循环,或者我缺少的任何线程安全类?
答案 0 :(得分:3)
对于队列,是的,您需要一个线程安全版本。我推荐QMutex和QMutexLocker一起自动处理解锁。
如果您的消费者和制作人在缓冲区的不同部分工作,我建议改为semaphore。
信号量可以提供更高级别的并发性 互斥。如果对缓冲区的访问由QMutex保护,那么 消费者线程无法同时访问缓冲区 生产者线程。然而,让两个线程都工作是没有害处的 在缓冲区的不同部分同时进行。