Qt之多執行緒 QMutex

2021-07-26 23:36:09 字數 1067 閱讀 4790

在多執行緒的概念中,如果多個執行緒同時的去修改某乙個變數,這樣會導致最終的結果出現偏差。為了解決此類問題,在多執行緒中引入互斥量的概念,通過它來保護乙個變數、一段**塊,防止同時操作某乙個變數的事件發生。在qt中,通過qmutex類來實現互斥的功能。

例如,下面的一段**:

void method1()

void method2()

如果這兩個函式按照順序執行,則會產生如下的結果:

//method1()

number *= 5; //number is now 30

number /= 4; //number is now 7

//method2()

number *= 3; //number is now 21

number /= 2; //number is now 10

如果這兩個函式分別在兩個執行緒中並且同時執行,則可能會產生如下結果:

//thread1 calls method1()

number *= 5; //number is now 30

//thread2 calls method2()

//此時執行緒1會處於睡眠狀態

number *= 3; //number is now 90;

number /= 2; //number is now 45;

//thread1 finishes executing

number /= 4; //number is now 11, instead of 10

為了防止上面的情況發生,我們新增乙個全域性的qmutex變數mutex,這樣就可以得到我們期望的結果:

qmutex mutex;

int number = 6;

void method1()

void method2()

經過上面的修改後,在同一時間只能有乙個執行緒可以修改number。當某一線程呼叫lock()成功後,其它的執行緒呼叫lock()會被阻塞,直到之前的執行緒呼叫unlock()。

QT開發之多執行緒

在linux中我們經常使用多執行緒程式設計,同時就會提出同步和非同步操作.像原子變數,訊號量,阻塞,自旋鎖,互斥所等,在qt中也有類似的概念,但是在我的開發中用的不是很多,下面列舉一下多執行緒程式設計的基礎.新建乙個gui應用專案,注釋的非常詳細.建立執行緒後,啟動執行緒預設是run函式,除非有特殊...

Qt之多執行緒簡單學習

qt中建立執行緒的方法 只需要子類化qthread並重新實現它的run 函式就可以了。run 是個純虛函式,是執行緒執行的入口,在run 裡出現的 將會在另外執行緒中被執行。run 函式是通過start 函式來實現呼叫的。下面是我學習時的例子 工程檔案 介面效果 執行效果 stopped被宣告為易失...

QT開發之多執行緒建立使用

建立乙個執行緒類,儲存執行 退出和繼續執行的功能函式 mythread.h ifndef mythread h define mythread h include class mythread public qthread endif mythread hmythread.cpp include m...