Built upon QThread
, several threading technologies are available in Qt. First, to synchronize threads, the usual approach is to use a mutual exclusion (mutex) to have a mutual exclusion for a given resource. Qt provides it by means of the QMutex
class. Its usage is straightforward:
QMutex mutex; int number = 1; mutex.lock(); number *= 2; mutex.unlock();
From the mutex.lock()
instruction, any other thread trying to lock the mutex
will wait until mutex.unlock()
has been called.
The locking/unlocking mechanism is error-prone in complex code. You can easily forget to unlock a mutex in a specific exit condition, causing a deadlock. To simplify this situation, Qt provides a QMutexLocker
that should be used where the QMutex
needs to be locked:
QMutex mutex; QMutexLocker locker(&mutex); int number = 1; number *= 2; if (overlyComplicatedCondition) { return; } else if (notSoSimple) { return; }
The mutex
is locked when the locker...