2012年2月25日 星期六

Critical Section/Mutex/Semaphore

Critical section(臨界區間)指的是一個存取共用資源(例如:共用裝置或是共用記憶體)的程式片段,而這些共用資源又無法同時被多個執行緒存取的特性[1]

Critical section design必須要滿足三個特性:
1)Mutual exclusion
2)Progress
3)Bounded waiting


1)Mutual exclusion
同一時間點,絕不允許有多個(大於兩個)processes在各自的C.S.內活動,亦即當有一process在自己的C.S.內活動,其他想進入各別C.S.內的processes必須等待,直到該process離開C.S.

2)Progress
I:不想進入C.S.的process絕不能阻礙其他processes進入C.S. (i.e.絕不參與進入C.S.的決策過程)
II:決定哪個processes可以進入C.S.的決策時間是有限的(i.e. No Deadlock)

3)Bounded waiting
自process提出申請進入C.S.到其獲准進入C.S.的這段等待時間是有限的。/* 即n個process欲進入C.S.,則任何一process至多等待(n-1)次後,即可進入C.S */



multi-tasking system中要解決Critical section問題就有Mutex以及Semaphore兩種方法
1)Mutex
Mutex基本就像是把key,當有process想要access一個共用的resource時會先去取得進入這個resource的"Key",當這個key被前一個process給hold住的時候就只能wait

2)Semaphore
雷同Mutex,但是把它擴大為可以同時有N個人擁有key並能access共用的resource

Reference:

[1]http://zh.wikipedia.org/wiki/%E8%87%A8%E7%95%8C%E5%8D%80%E6%AE%B5

沒有留言:

張貼留言