訊號量 與 互斥量(鎖)的區別
一、概念和定義
訊號量:多執行緒同步使用的;乙個執行緒完成某個動作後通過訊號告訴別的執行緒,別的執行緒才可以執行某些動作;
互斥量:多執行緒互斥使用的;乙個執行緒占用某個資源,那麼別的執行緒就無法訪問,直到該執行緒離開,其他執行緒才可以訪問該資源;
二、訊號量 與 互斥量的區別
1、互斥量用於執行緒的互斥,訊號量用於執行緒的同步:
互斥:指某一資源同時只允許乙個訪問者對其進行訪問,具有唯一性和排他性。但是互斥無法限制訪問者對資源的訪問順序,所以訪問是無序的;
同步:指在互斥的基礎上(多數情況),通過其他機制實現訪問者對資源的有序訪問。大多數情況下,同步已經實現了互斥,特別是所有寫入資源的情況必定是互斥的。少數情況指可以允許多個訪問者同時訪問資源。
2、互斥量值只能是0/1,訊號量值可以為非負整數:
乙個互斥量只能用於乙個資源的互斥訪問不能實現多個資源的多執行緒互斥問題;
乙個訊號量可以實現多個同類資源的多執行緒互斥和同步。當訊號量為單值訊號量時,也可以完成乙個資源的互斥訪問;
3、互斥量的加鎖和解鎖必須由同一執行緒分別對應使用;而訊號量可以由乙個執行緒釋放,另外乙個執行緒得到。
三、訊號量與互斥量的詳細分析
訊號量--semaphore:
分類:二進位制訊號量(binary semaphore):只允許訊號量取0或1值,其同時只能被乙個執行緒獲取;
整型訊號量(integer semaphore):訊號量取值是整數,可被多個執行緒同時獲得,直到訊號量的值變為0;
記錄型訊號量(record semaphore):每個訊號量s除以乙個整數值value(計數)外,還有乙個等待佇列list,其中是阻塞在該訊號量的各個執行緒的標識。
當訊號量被釋放1個,值被加1後,系統自動從等待佇列中喚醒乙個等待中的執行緒;讓其獲得訊號量,同時訊號量再減1。
semaphore 抽象操作:
create() / wait() / post() / trywait() / destroy()
互斥量--mutex:
互斥量表現互斥現象的資料結構,常用作保護從中斷來的臨界段**並且在共享同步使用的資源;
mutex本質就是一把鎖,提供對資源的獨佔式訪問,所以mutex主要的作用是互斥。
mutex 抽象操作:
create() / lock() / unlock() / destroy()
訊號量 互斥量
lonelycatcher if only as first.來自 訊號量用在多執行緒多工同步的,乙個執行緒完成了某乙個動作就通過訊號量告訴別的執行緒,別的執行緒再進行某些動作 大家都在semtake的時候,就阻塞在 而互斥鎖是用在多執行緒多工互斥的,乙個執行緒占用了某乙個資源,那麼別的執行緒就無法...
互斥量和訊號量的區別
1.互斥量用於執行緒的互斥,訊號量用於執行緒的同步。這是互斥量和訊號量的根本區別,也就是互斥和同步之間的區別。互斥 是指某一資源同時只允許乙個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。同步 是指在互斥的基礎上 大多數情況 通過其它機制實現訪問者對資...
互斥量和訊號量的區別
1.互斥量用於執行緒的互斥,訊號量用於執行緒的同步。這是互斥量和訊號量的根本區別,也就是互斥和同步之間的區別。互斥 是指某一資源同時只允許乙個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。同步 是指在互斥的基礎上 大多數情況 通過其它機制實現訪問者對資...