2015年10月20日 星期二

Semaphore、mutex、spin lock

Semapore: 一件可容納N人的房間,當人滿了,就要等待人在出來;當N=1稱binary semapore。一般用法用於限制對於某一資源的同時訪問。
進行Sem操作是讓系統進入sleep

Semapore透過原子的方式來進行加減,可看做為一個counter;用來計數有多少個剩餘資源或多少process在等待。

Mutex: Mutex是一把鑰匙,一個拿了就可進入一個房間,出來的時候將鑰匙交給隊列的第一個。一般用法用於串列化對critical section的訪問,保證這代碼不會被並行(concurrency)的運用。

Spin lock:spinlock利用test and set這個指令看有沒有辦法取得lock 因為是指令層級的操作所以有辦法達到atomic當lock無法取得時會用polling的方式不斷嘗試特別的地方是當他取得lock時 process將不會進入睡眠(沒有context switch)
這有幾個好處
  1. 效能會比semaphore好 因為他不做context switch可以一直執行
  2. 在SMP環境中 因為process不會進入睡眠 無法執行其他process或處理interrupt會將工作分擔給其他cpu(但在單cpu情況下就像是disable interrup)

Ref:

  1. http://fanli7.net/a/caozuoxitong/Linux/20111201/148928.html
  2. http://elehsaing.blogspot.tw/2014/05/semaphore-vs-mutex-vs-spinlock.html
  3. http://orzlab.blogspot.tw/2007/03/mutex.html


沒有留言:

張貼留言