Flying over Qt multithreading technologies
Built upon QThread, several threading technologies are available in Qt. First, to synchronize threads, the usual approach is to use a mutual exclusion (mutex) that will apply 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 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 QMutexLocker, which should be used where QMutex needs to be locked:
QMutex mutex;
QMutexLocker locker(&mutex);
int number = 1;
number *= 2;
if (overlyComplicatedCondition) {
return;
} else if (notSoSimple) {
return;
} mutex is locked when the locker object is created and will...