同步與鎖定

mutex 只允許一個 thread 取存,並且 acquire 與 release 必需在同一個 thread 中。semaphore 可以允許多個 thread 存取,acquire/release 不需在同 thread 中。


假設 semaphore 初始值為 N,代表允許 N 個 thread 同時存取。acquire 操作如下:


N--
如果 N < 0 則 wait,否則繼續


release 操作如下:


N++
如果 N < 1 則喚醒一個等待中的 thread


而 critical section 類似 mutex,但比 mutex 更嚴格。mutex/semaphore 可以被其它 process 存取。但 critical section 則不行。


另一個是 read-write lock。lock 可分為 shared 跟 exclusive。假設一個資料常常被讀取,少數時間才會修改,則適合用這種 lock。當 lock 為 shared 狀態時,acquire shared lock 可被允許,但 exclusive 則不允許,要等待;當 lock 為 exclusive 時,無論 shared or exclusive 都要等待。當 lock 為 free 狀態時,則 shared or exclusive 都可以獲得。


留言

熱門文章