线程安全QQueue

时间:2015-02-05 19:48:40

标签: c++ multithreading qt mutex

在Qt应用程序中,我需要从一个线程添加项目,并从另一个线程中使用它们。正如Qt文档所述的容器类:

  

...在将它们用作只读的情况下,它们是线程安全的   用于访问它们的所有线程的容器。

我假设我需要创建一个线程安全版本,或者用互斥锁保护它。有没有推荐的解决方案?比如直接使用Qt事件循环,或者我缺少的任何线程安全类?

1 个答案:

答案 0 :(得分:3)

对于队列,是的,您需要一个线程安全版本。我推荐QMutex和QMutexLocker一起自动处理解锁。

如果您的消费者和制作人在缓冲区的不同部分工作,我建议改为semaphore

  

信号量可以提供更高级别的并发性   互斥。如果对缓冲区的访问由QMutex保护,那么   消费者线程无法同时访问缓冲区   生产者线程。然而,让两个线程都工作是没有害处的   在缓冲区的不同部分同时进行。