Qt的QBuffer线程安全吗?

S B*_*S B 4 c++ qt thread-safety

我在模式中使用QBufferReadWrite.一名工作人员QThread将数据推入缓冲区,另一名工作人员QThread从中读取数据

QBuffer保证线程安全还是我需要派生QBuffer并添加互斥件?

jdi*_*jdi 8

引用Mark Summerfield的书Qt 4的C++ GUI编程:

Qt的线程安全类包括QMutex,QMutexLocker,QReadWriteLock,QReadLocker,QWriteLocker,QSemaphore,QThreadStorage和QWaitCondition.此外,部分QThread API和其他几个函数是线程安全的,特别是QObject :: connect(),QObject :: disconnect(),QCoreApplication :: postEvent()和QCoreApplication :: removePostedEvents().

Qt期望你将在其大部分类中使用锁定机制.文档将说"所有函数都是线程安全的",如果它们是,并且各个函数也将指定"是线程安全的".

关于Qt类的注释

许多Qt类是可重入的,但它们不是线程安全的,因为使它们成为线程安全会导致重复锁定和解锁QMutex的额外开销.例如,QString是可重入的,但不是线程安全的.您可以安全地同时从多个线程访问QString的不同实例,但是您无法同时从多个线程安全地访问同一个QString实例(除非您使用QMutex自行保护访问).

一些Qt类和函数是线程安全的.这些主要是与线程相关的类(例如QMutex)和基本函数(例如QCoreApplication :: postEvent()).

因为我是特别希望它不是线程安全QBuffer的直接子类QIODevice,但是有一些容器类对于读访问是线程安全的,但是需要锁定以进行写访问:

容器类

容器类是隐式共享的,它们是可重入的,并且它们针对速度,低内存消耗和最小内联代码扩展进行了优化,从而导致较小的可执行文件.此外,它们在用于访问它们的所有线程用作只读容器的情况下是线程安全的.