目录
虽然线程的目的是允许代码并行运行,但有时线程必须停止并等待其他线程。例如,如果两个线程试图同时写入同一个变量,则结果是未定义的。强制线程彼此等待的原则称为互斥。这是保护共享资源(如数据)的常用技术。
Qt中的提供了多种线程同步方式,如下表所示
互斥量 | QMute |
读写锁 | QReadWriteLock |
信号量 | QSemaphore |
条件变量 | QWaitCondition |
Qt提供了同步相关的辅助类—QMutexLocker、QReadLocker和QWriteLocker,这样就可以更容易地使用QMutex和QReadWriteLock了。它们在构建资源时锁定资源,在销毁资源时自动解锁资源。它们旨在简化使用QMutex和QReadWriteLock的代码,从而减少资源意外永久锁定的可能性。
这些同步类可用于使方法线程安全。然而,这样做会导致性能损失,这就是为什么大多数Qt方法都不是线程安全的。
一.QMutex
QMutex通过强制互斥来同步线程。线程锁定mutex获得对共享资源的访问。如果第二个线程试图在mutex已锁定的情况下去锁定mutex,则第二个线程将进入休眠状态(阻塞),直到第一个线程完成任务并解锁mutex。
QMutex的一般用法如下
QMutex mutex
void doSomething()
{
mutex.lock();
qDebug()&l