執行緒之間存在著相互制約的關係,具體可分為互斥和同步這兩種關係。
在程式中,通常都會用到叫做」臨界資源「的東西,可能是一塊記憶體,乙個資料結構,乙個檔案等具有排他性使用的東西。這些東西,在多執行緒環境下,必須進行互斥處理,才能安全地使用臨界資源。所以,對臨界資源執行互斥操作的**片段,叫做臨界區。
互斥量
通常使用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,...