進行Sem操作是讓系統進入sleep
Semapore透過原子的方式來進行加減,可看做為一個counter;用來計數有多少個剩餘資源或多少process在等待。
Mutex: Mutex是一把鑰匙,一個拿了就可進入一個房間,出來的時候將鑰匙交給隊列的第一個。一般用法用於串列化對critical section的訪問,保證這代碼不會被並行(concurrency)的運用。
Spin lock:spinlock利用test and set這個指令看有沒有辦法取得lock 因為是指令層級的操作所以有辦法達到atomic當lock無法取得時會用polling的方式不斷嘗試特別的地方是當他取得lock時 process將不會進入睡眠(沒有context switch)
這有幾個好處
- 效能會比semaphore好 因為他不做context switch可以一直執行
- 在SMP環境中 因為process不會進入睡眠 無法執行其他process或處理interrupt會將工作分擔給其他cpu(但在單cpu情況下就像是disable interrup)
Ref:
- http://fanli7.net/a/caozuoxitong/Linux/20111201/148928.html
- http://elehsaing.blogspot.tw/2014/05/semaphore-vs-mutex-vs-spinlock.html
- http://orzlab.blogspot.tw/2007/03/mutex.html
沒有留言:
張貼留言