天天看點

程序互斥與程序同步

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

程序互斥:程序間的間接作用關系。兩個或兩個以上的程序,不能同時進入關于同一組共享變量的臨界區域。比較典型的問題是列印機的共享通路。

程序同步:程序間的直接作用關系。在多道程式環境下,程序是并發執行的,不同程序之間存在着不同的互相制約關系。比較典型的問題有生産消費者問題、哲學家進餐問題等。

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

1.臨界區,顧名思義,有一段代碼區,每次最多隻能由一個程序通路。由于程序是資源配置設定的最小機關,是以在臨界區内資源的通路隻能是同一程序下的子程序或線程通路。是以臨界區的使用存在着局限性。臨界區的使用操作原語有兩個:EnterCriticalSection() 進入臨界區

LeaveCriticalSection() 離開臨界區

2.互斥量,字面上了解就是互斥通路的資源,隻不過該資源是公用的,而不是某個程序私有的,是以這種機制可以實作不同程序的互斥。互斥量所使用的操作原語有四個:

CreateMutex() 建立互斥量

OpenMutex() 打開互斥量

ReleaseMutex() 釋放互斥量

WaitForMultipleObjects() 等待互斥量

實作程序同步方式:使用信号量。

信号量的特點就是允許多個程序同時通路,數量由資源數目決定。

信号量包含的幾個操作原語:

  CreateSemaphore() 建立信号量

  OpenSemaphore() 打開信号量

  ReleaseSemaphore() 釋放信号量

  WaitForSingleObject() 等待信号量

繼續閱讀