進程互斥與進程同步

進程之間的相互作用關係分爲兩種,一種是共享資源的關係,一種是相互合作的關係,前者屬於進程互斥、後者屬於進程同步。我們把實現這兩類相互制約關係的機制,統稱爲進程同步機制。同步機制有四大原則:空閒讓進、忙則等待、有限等待、讓全等待。

進程互斥:進程間的間接作用關係。兩個或兩個以上的進程,不能同時進入關於同一組共享變量的臨界區域。比較典型的問題是打印機的共享訪問。
進程同步:進程間的直接作用關係。在多道程序環境下,進程是併發執行的,不同進程之間存在着不同的相互制約關係。比較典型的問題有生產消費者問題、哲學家進餐問題等。

實現進程互斥的方式有:設定臨界區、使用互斥量。

1.臨界區,顧名思義,有一段代碼區,每次最多隻能由一個進程訪問。由於進程是資源分配的最小單位,所以在臨界區內資源的訪問只能是同一進程下的子進程或線程訪問。所以臨界區的使用存在着侷限性。臨界區的使用操作原語有兩個:EnterCriticalSection() 進入臨界區
LeaveCriticalSection() 離開臨界區

2.互斥量,字面上理解就是互斥訪問的資源,只不過該資源是公用的,而不是某個進程私有的,所以這種機制可以實現不同進程的互斥。互斥量所使用的操作原語有四個:
CreateMutex() 創建互斥量
OpenMutex() 打開互斥量
ReleaseMutex() 釋放互斥量
WaitForMultipleObjects() 等待互斥量

實現進程同步方式:使用信號量。
信號量的特點就是允許多個進程同時訪問,數量由資源數目決定。
信號量包含的幾個操作原語:
  CreateSemaphore() 創建信號量
  OpenSemaphore() 打開信號量
  ReleaseSemaphore() 釋放信號量
  WaitForSingleObject() 等待信號量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章