Qt中的鎖(1)
加鎖,把多個要訪問的公共資源通過鎖保護起來,把并行執行變成串行執行,
多個線程執行加鎖的對象得是同一個對象,不同對象不會互斥
代碼:
//添加一個static成員static int num;//創建鎖對象static QMutex mutex;void run();
//創建兩個線程對象Thread t1;Thread t2;t1.start();t2.start();//加上線程等待,讓主線程等待這兩線程執行t1.wait();t2.wait();//打印結果qDebug()<<Thread::num;
void Thread::run()
{for(int i=0;i<50000;i++){mutex.lock();num++;mutex.unlock();}
}
其中num是一個兩個線程訪問的公共變量,之前如果是并發執行,第一個改變,第二個也會改變,就會出現問題
加了鎖之后,第一個線程順利拿到鎖繼續執行++,此時第二個線程要進來就會阻塞,直到第一個線程釋放鎖才會放第二個進入,把第二個線程從阻塞中釋放