列舉幾種程序的同步機制及優缺點
1)訊號量機制:
一個訊號量只能置一次初值,以後只能對之進行p操作或v操作。
由此也可以看到,訊號量機制必須有公共記憶體,不能用於分散式作業系統,這是它最大的弱點。
2)自旋鎖:
旋鎖是為了保護共享資源提出的一種鎖機制。
呼叫者申請的資源如果被佔用,即自旋鎖被已經被別的執行單元保持,則呼叫者一直迴圈在那裡看是否該自旋鎖的保持著已經釋放了鎖
自旋鎖是一種比較低階的保護資料結構和程式碼片段的原始方式,可能會引起以下兩個問題;
(1)死鎖
(2)過多地佔用CPU資源
3)管程:
訊號量機制功能強大,但使用時對訊號量的操作分散,而且難以控制,讀寫和維護都很困難。因此後來又提出了一種集中式同步程序——管程。其基本思想是將共享變數和對它們的操作集中在一個模組中,作業系統或併發程式就由這樣的模組構成。這樣模組之間聯絡清晰,便於維護和修改,易於保證正確性。
4)會合:
程序直接進行相互作用
5)分散式系統:
由於在分散式作業系統中沒有公共記憶體,因此引數全為值參,
而且不可為指標。
優缺點:
訊號量(Semaphore)及PV操作
優:PV操作能夠實現對臨界區的管理要求;實現簡單;允許使用它的程式碼休眠,持有鎖的時間可相對較長。
缺:訊號量機制必須有公共記憶體,不能用於分散式作業系統,這是它最大的弱點。訊號量機制功能強大,但使用時對訊號量的操作分散,而且難以控制,讀寫和維護都很困難。加重了程式設計師的編碼負擔;核心操作P-V分散在各使用者程式的程式碼中,不易控制和管理;一旦錯誤,後果嚴重,且不易發現和糾正。
自旋鎖:
優:旋鎖是為了保護共享資源提出的一種鎖機制; 呼叫者申請的資源如果被佔用,即自旋鎖已經被別的執行單元保持,則呼叫者一直迴圈在那裡看是否該自旋鎖的保持者已經釋放了鎖; 低開銷;安全和高效;
缺:自旋鎖是一種比較低階的保護資料結構和程式碼片段的原始方式,可能會引起以下兩個問題;
(1)死鎖
(2)過多地佔用CPU資源
傳統自旋鎖由於無序競爭會導致“公平性”問題
管程:
優: 集中式同步程序——管程。其基本思想是將共享變數和對它們的操作集中在一個模組中,作業系統或併發程式就由這樣的模組構成。這樣模組之間聯絡清晰,便於維護和修改,易於保證正確性。
缺:如果一個分散式系統具有多個CPU,並且每個CPU擁有自己的私有記憶體,它們通過一個區域網相連,那麼這些原語將失效。而管程在少數幾種程式語言之外又無法使用,並且,這些原語均未提供機器間的資訊交換方法。
會合:
程序直接進行相互作用
分散式系統:
訊息和rpc
由於在分散式作業系統中沒有公共記憶體,因此引數全為值參,
而且不可為指標