訊號量用在多執行緒多工同步的,乙個執行緒完成了某乙個動作就通過訊號量告訴別的執行緒,別的執行緒再進行某些動作(大家都在semtake的時候,就阻塞在**)。
互斥鎖是用在多執行緒多工互斥的,乙個執行緒占用了某乙個資源,那麼別的執行緒就無法訪問,直到這個執行緒unlock,其他的執行緒才開始可以利用這個資源。比如對全域性變數的訪問,有時要加鎖,操作完了,在解鎖。有的時候鎖和訊號量會同時使用的」
訊號量不一定是鎖定某乙個資源,而是流程上的概念,比如:有a,b兩個執行緒,b執行緒要等a執行緒完成某一任務以後再進行自己下面的步驟,這個任務並不一定是鎖定某一資源,還可以是進行一些計算或者資料處理之類。而執行緒互斥量則是「鎖住某一資源」的概念,在鎖定期間內,其他執行緒無法對被保護的資料進行操作。在有些情況下兩者可以互換。
兩者之間的區別:
作用域
訊號量: 程序間或執行緒間(linux僅執行緒間)
互斥鎖: 執行緒間
上鎖時
訊號量: 只要訊號量的value大於0,其他執行緒就可以sem_wait成功,成功後訊號量的value減一。若value值不大於0,則sem_wait阻塞,直到sem_post釋放後value值加一
互斥鎖: 只要被鎖住,其他任何執行緒都不可以訪問被保護的資源
訊號量與互斥鎖的區別
儘管兩個概念有點類似,但是他們的側重點不一樣,不難看出,mutex是semaphore的一種特殊情況 n 1時 也就是說,完全可以用後者替代前者。但是,因為mutex較為簡單,且效率高,所以在必須保證資源獨佔的情況下,還是採用這種設計。semaphore可以被抽象為五個操作 1.建立 create,...
訊號量與互斥鎖的區別
之前遇到乙個問題,訊號量和互斥鎖的區別是什麼。一時忘了思考,今天才想到這個問題,翻閱知乎和stackoverflow,理解了之後做簡單整理 mutex,互斥鎖,用於序列化對一部分可重入 的訪問,這些 不能由多個執行緒同時執行 semaphore,訊號量,將共享資源的併發使用者數限制為最大數量 mut...
訊號量與互斥鎖
訊號量與普通整型變數的區別 訊號量 semaphore 是非負整型變數,除了初始化之外,它只能通過兩個標準原子操作 wait semap signal semap 來進行訪問 操作也被成為pv原語 p 於dutch proberen 測試 v 於 dutch verhogen 增加 而普通整型變數則...