Qt學習(二) 多執行緒控制

2021-08-14 09:40:11 字數 1025 閱讀 1253

執行緒之間存在著相互制約的關係,具體可分為互斥和同步這兩種關係。

在程式中,通常都會用到叫做」臨界資源「的東西,可能是一塊記憶體,乙個資料結構,乙個檔案等具有排他性使用的東西。這些東西,在多執行緒環境下,必須進行互斥處理,才能安全地使用臨界資源。所以,對臨界資源執行互斥操作的**片段,叫做臨界區。

互斥量

通常使用qmutex,qmutexlocker這兩個類進行互斥操作。舉乙個簡單的例子:

int createkey()
int createkey()
第乙個**片段,雖然使用了lock()操作,但unlock()操作在return之後,從而導致unlock()操作永遠無法進行。

第二個**片段locker()函式作為區域性變數會在函式退出時結束其作用域,從而自動對互斥量mutex解鎖。

訊號量

訊號量可以理解為對互斥功能的擴充套件,互斥量只能鎖定一次而訊號量可以獲取多次,它可以用來保護一定數量的同種資源。訊號亮的典型用例是控制生產者/消費者之間共享的環形緩衝區。

嗯生產者消費者問題,作業系統也講過啊。

const int buffersize = 80;

int buffer[buffersize];

qsemaphore freebytes(buffersize);

qsemaphore usedbytes(0);

class producer :public qthread

;producer::producer()

void producer::run()

}class consumer :public qthread

;consumer::consumer()

void consumer::run()

freebytes.release();

} fprintf(stderr, "\n");

}int main(int argc, char *argv)

Qt中多執行緒系列之執行緒控制

執行緒建立完了之後必須要對其進行限制和控制,我們就是執行緒的監護人,不能說任由它自由,得對它進行合理約束。接下來我們講執行緒的控制部分,1 執行緒休眠 想象一下一種情形,日常用的電腦,如果我們需要離開一段時間,那麼可能會將它暫時休眠一下,為了節約用電,也響應一下環境保護,別忘了現在都講低炭生活。那麼...

linux多執行緒控制

include include include include include define size 1024 函式作用 使用訊號量控制,讀取輸入,獲得長度 void thread function void argv char buf size sem t sem int main res pt...

python多執行緒控制

利用wait的阻塞機制,就能夠實現暫停和恢復了,再配合迴圈判斷標識位,就能實現退出了 usr bin env python coding utf 8 import threading import time class job threading.thread def init self,args,...