程序同步之Perterson演算法

2021-08-10 09:07:10 字數 531 閱讀 9606

程序同步主要用來解決臨界區問題,簡單來講就是確保同一時間只能有乙個程序訪問臨界區。現在介紹乙個比較經典的peterson演算法。

peterson演算法的表述如下:對於程序pi和pj來說,設定乙個整數變數turn來確定誰可以進入臨界區,和乙個整型陣列flag[2]來確定誰想進去臨界區。

do我們可以這麼理解這段**。對於乙個程序pi而言,如果它想進入臨界區,首先它要告訴作業系統它想進入臨界區(flag[i]=true),但此時它還不能進入臨界區。這時作業系統說,由於程序pi沒有進入臨界區,程序pj就可以進入臨界區(turn=j)。當然pj也可以選擇不進入臨界區,那麼pi就進入臨界區,在它操作完成之後,它需要告訴作業系統自己不再想進入臨界區了,然後把flag[i]設為false,以避免占有「進入的慾望」。但是,如果程序pj選擇進入臨界區,那麼程序pi就得等待,也就是**中的for迴圈。

這個**的設計思路在於——「讓」。程序pi提出請求後,作業系統會先把進入權給予其他程序,確保其他程序都不想進入的情況把,才允許程序pi進入臨界區。

更多講解,請參看《作業系統概念(第7版)》p169.

程序同步(一) 程序同步相關概念

在os中引入程序後,雖然提高了資源的利用率和系統吞吐量,但是由於程序的非同步性將會給系統造成混亂,尤其是他們在爭搶臨界資源時。當多個程序去爭用共享變數 鍊錶時,可能導致資料處理出錯。程序同步的任務就是對多個相關程序在執行次序上進行協調,使得併發執行的程序之間能有效地共享資源和相互合作,從而使程式的執...

Linux程序同步

linux程序同步 概述 程序間通訊 ipc 方法主要有以下幾種 管道 fifo 共享記憶體 訊息佇列 訊號量 1.管道中還有命名管道和非命名管道 即匿名管道 之分,非命名管道 即匿名管道 只能用於父子程序通訊,命名管道可用於非父子程序,命名管道就是fifo,管道是先進先出的通訊方式 2.訊息佇列是...

程序同步問題

有讀者和寫者兩組併發程序,共享乙個檔案,當兩個或以上的讀程序同時訪問共享資料時不會產生 但若某個寫程序和其他程序 讀程序或寫程序 同時訪問共享資料時則可能導致資料不一致的錯誤。因此要求 允許多個讀者可以同時對檔案執行讀操作 只允許乙個寫者往檔案中寫資訊 任一寫者在完成寫操作之前不允許其他讀者或寫者工...