1. 程式人生 > >執行緒控制複習

執行緒控制複習

執行緒和程序的關係

①執行緒是計算機中獨立執行的最小單位,執行時佔用很少的系統資源(執行緒使用的資料通常只有暫存器資料以及程式執行時的堆疊)。
②執行緒亦可以看做作業系統分配CPU時間的基本單位。
③一個程序可以擁有多個執行緒。
④因為程序地址空間獨立,而通常執行緒共享程序地址空間,所以切換執行緒要比切換程序快。
⑤同樣,建立一個新的程序要比建立一個執行緒消耗的資源大。
⑥通訊方面,程序由於獨立地址空間,通訊必須通過作業系統,而執行緒間是共享程序的地址空間的,可以不需要通過作業系統就可以達到通訊的目的。
⑦可以充分發揮硬體的潛能,像多核cpu,完全可以讓多個執行緒同時執行,大大提高程式執行的效率。
⑧改善程式結構,使程式設計變得簡單,利於維護。
⑨每個執行緒都有唯一的一個執行緒號ID與之對應。
⑩堆疊、訊號掩碼、優先順序、執行緒私有的儲存空間。

互斥鎖

互斥鎖通過鎖的機制來實現執行緒間的同步。通俗的講,就是互斥鎖可以讓執行緒在處理某個重要任務時不會被其他執行緒打斷或者是被切換執行緒直到執行結束鎖被開啟。這也是原子操作的概念。
舉個例子,有A、B兩個執行緒,A、B都對全域性變數i做值操作,A使i+1返回,B使i*2返回,當執行一次後,i的值為多少,i初始為10,。可能最後返回的是11,也可能是20.為什麼不是21、22呢?因為A、B兩個執行緒同時拿到並對i做值處理,如果先處理A執行緒,返回了11,這個時候B執行緒也處理完了,並返回了20,這個時候11就被20覆蓋了。
像上面這種情況就應該使用互斥鎖。使用鎖的目的是達到同步的作用,使共享資源在同一時間內,只有能有一個程序或者執行緒對他進行操作。

訊號量

訊號量是用來實現執行緒同步的。跟互斥鎖的區別是,互斥鎖用於執行緒互斥,即一個執行緒對某個資源訪問的同時,別的執行緒不能訪問。而訊號量是用於執行緒同步的,一個執行緒完成某個動作後告訴別的執行緒,然後別的執行緒才可以執行某些操作
訊號量很多時候其實已經實現了互斥。
另外,互斥鎖只能加鎖的執行緒釋放鎖,而訊號量可以一個執行緒掛起,另外一個執行緒釋放。這就使得訊號量可以決定某些操作的發生順序,像MFC等很多系統的事件響應機制就是訊號量的實現。