2.3.1 程序同步與互斥
知識來源: B站王道考研
什麼是程序同步
知識回顧:程序具有異步性的特征。異步性是指,各并發執行的程序以各自獨立的、不可預知的速度向前推進。
讀程序和寫程序并發地運作,由于并發必然導緻異步性,是以“寫資料”和“讀資料”兩個操作執行的先後順序是不确定的。而實際應用中,又必須按照“寫資料 --> 讀資料”的順序來執行的。
如果解決這種異步問題,就是“程序同步”所讨論的内容。
同步也稱為直接制約關系,它是指為完成某種任務而建立的兩個或多個程序,這些程序因為需要在某些位置上協調他們的工作次序而産生的制約關系。程序間的直接制約關系就是源于它們之間的互相合作。
什麼是程序互斥
程序的“并發”需要“共享”的支援。各個并發執行的程序不可避免的需要共享一些系統資源(比如記憶體,列印機、攝像頭等I/O裝置)
知識回顧:
兩種資源共享方式:
互斥共享方式:系統種的某些資源,雖然可以提供給多個程序使用,但一個時間段内隻允許一個程序通路該資源
同步共享方式:系統中的某些資源,允許一個時間段内由多個程序“同時”對它們進行通路。
臨界資源: 一個時間段内隻允許一個程序使用
對臨界資源的通路,必須互斥地進行。互斥也稱為間接制約關系。程序互斥指當一個程序通路某臨界資源時,另一個想要通路該臨界資源的程序必須等待。目前通路臨界資源的程序通路結束,釋放該資源之後,另一個程序才能u通路臨界資源。
do{
entry section; // 進入區
critical section; // 臨界區
exit section; // 退出區
remainder section; // 剩餘區
}while(true);
臨界區是程序中通路臨界資源的代碼段。
進入區和退出區是負責實作互斥代碼段。
臨界區也可稱為“臨界段”。
實作臨界資源互斥通路,需遵循:
1.空閑讓進:臨界區空閑時,可以允許一個請求進入臨界區的程序立即進入臨界區;
2.忙則等待:當已有程序進入臨界區時,其他試圖進入臨界區的程序必須等待。
3.有限等待:對請求通路的程序,應保證能在有限時間内進入臨界區(保證不會饑餓)
4.讓權等待:當程序不能進入臨界區時,應立即釋放處理機,防止程序忙等待。