多线程运行时,通常会访问同一个变量,同一个数据结构,或者同一段代码。因此,需要使用互斥技术来保护上述资源,确保多线程执行数据的正确性。
实现有两种方法:
第1种:
#include<QMutex>
QMutexmutex;
Function{
mutex.lock()
... ... ... //中间是需要保护的代码段
mutex.unlock();
}
这是还有一种简便方法:
#include<QMutex>
#include<QMutexLocker>
QMutex mutex;
Function{
QMutexLocker locker(&mutex); //此方法会从locker被声明开始,一直到它的作用//域结束的地方进行上锁,好处是不用手动解锁,避免造成死锁
… //代码段
}
这种方法对线程进行上锁只能一个线程进行读或者写操作。
第2种:是使用QReadWriteLock;
#include <QReadWriteLock>
QReadWriteLock readWriteLock;
function{
QWriteLocker writeLocker(&readWriteLock);//对writeLocker变量作用域内的代码段进行写锁,超过作用域后会自动进行解锁
QReadLocker readLocker(&readWriteLock)//对readLocker变量作用域内的代码段进行读锁,超过作用域后会自动进行解锁
}
这种方法的好处是在多个线程中可以同时进行读,但写只能有一个线程执行