linux下訊號量和互斥鎖的區別

時間 2021-07-21 02:17:55

1樓:匿名使用者

訊號量與互斥鎖之間的區別:

1. 互斥量用於執行緒的互斥,訊號量用於執行緒的同步。

這是互斥量和訊號量的根本區別,也就是互斥和同步之間的區別。

互斥:是指某一資源同時只允許一個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。

同步:是指在互斥的基礎上(大多數情況),通過其它機制實現訪問者對資源的有序訪問。在大多數情況下,同步已經實現了互斥,特別是所有寫入資源的情況必定是互斥的。

少數情況是指可以允許多個訪問者同時訪問資源

2. 互斥量值只能為0/1,訊號量值可以為非負整數。

也就是說,一個互斥量只能用於一個資源的互斥訪問,它不能實現多個資源的多執行緒互斥問題。訊號量可以實現多個同類資源的多執行緒互斥和同步。當訊號量為單值訊號量是,也可以完成一個資源的互斥訪問。

3. 互斥量的加鎖和解鎖必須由同一執行緒分別對應使用,訊號量可以由一個執行緒釋放,另一個執行緒得到。

2樓:匿名使用者

訊號量用在多執行緒多工同步的,一個執行緒完成了某一個動作就通過訊號量告訴別的執行緒,別的執行緒再進行某些動作(大家都在semtake的時候,就阻塞在**)。

而互斥鎖是用在多執行緒多工互斥的,一個執行緒佔用了某一個資源,那麼別的執行緒就無法訪問,直到這個執行緒unlock,其他的執行緒才開始可以利用這個資源。比如對全域性變數的訪問,有時要加鎖,操作完了,在解鎖。

有的時候鎖和訊號量會同時使用的。我記得以前做的一個專案就是既有semtake,又有lock。

訊號量和互斥鎖的區別

3樓:靡鴕新隊灘勘轎

訊號量與互斥鎖之間的區別:

1. 互斥量用於執行緒的互斥,訊號量用於執行緒的同步。

這是互斥量和訊號量的根本區別,也就是互斥和同步之間的區別。

互斥:是指某一資源同時只允許一個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。

同步:是指在互斥的基礎上(大多數情況),通過其它機制實現訪問者對資源的有序訪問。在大多數情況下,同步已經實現了互斥,特別是所有寫入資源的情況必定是互斥的。

少數情況是指可以允許多個訪問者同時訪問資源

2. 互斥量值只能為0/1,訊號量值可以為非負整數。

也就是說,一個互斥量只能用於一個資源的互斥訪問,它不能實現多個資源的多執行緒互斥問題。訊號量可以實現多個同類資源的多執行緒互斥和同步。當訊號量為單值訊號量是,也可以完成一個資源的互斥訪問。

3. 互斥量的加鎖和解鎖必須由同一執行緒分別對應使用,訊號量可以由一個執行緒釋放,另一個執行緒得到。

mutex和訊號量的區別

4樓:咱笨熊一個

mutex的設計目的是"持有後快速釋放",也就是說如果一個競爭者在獲取失敗後,會spin幾個迴圈後再嘗試,如果仍然失敗,則進入睡眠,這相當於semaphore獲取失敗後直接睡眠,多了一個spin過程,所以如果每個mutex在持有後又很快釋放,那麼就不存在cpu的喚醒過程。這顯然比semaphore快很多。具體參考https:

5樓:匿名使用者

mutex是一把鑰匙,一個人拿了就可進入一個房間,出來的時候把鑰匙交給佇列的第一個,一般的用法是用於序列化對臨界區**的訪問,保證這段**不會被並行的執行。

semaphore是一件可以容納n人的房間,如果人不滿就可以進去,如果人滿了,就要等待有人出來。

對於n=1的情況,稱為binary semaphore,一般的用法是,用於限制對於某一資源的同時訪問。在有的系統中binary semaphore與mutex是沒有差異的

利用記錄型訊號量寫哲學家進餐問題的演算法

1void philosopher int i 2semaphore chopstick 5 semaphore room 4 void philosopher int i 3semaphore chopstick 5 void philosopher int i 4semaphore mutex ...

windows下和linux下python的效率差很大怎麼回事

你在windows下用的idle吧,因為print要輸出到stdout,idle裡sys.stdout是直到視窗的,視窗是用tkinter寫的,所以執行的時候執行的操作比cmdline shell裡要多得多。我在windows的cmd裡執行這個需要0.3秒,在idle裡要3秒。 效率上我覺得差不多吧...

linux下程式設計和windows下的程式設計有什麼區別

linux 簡單的說跟 windows 一樣是一種作業系統,只是兩者之間的使用方法和習慣有所區別。具體的區別其實很大,不過已經不是能在這裡說清楚的事情了。對於 c 程式設計來說,他們最大的區別就是提供給你的系統相關的特性不一樣。這個導致了所謂的移植性問題以及平臺特性的問題。形象點的比喻是你可以認為 ...