讀者寫者問題的寫者優先演算法

2021-09-29 16:31:43 字數 1279 閱讀 3817

演算法如下:

有讀者(reader)和寫者(writer)兩組併發程序,共享乙個檔案,當兩個或以上的讀程序同時訪問共享資料時不會產生***,但若某個寫程序和其他程序(讀程序或寫程序)同時訪問共享資料時則可能導致資料不一致的錯誤。

因此要求:

① 允許多個讀程序可以同時對檔案執行讀操作;

② 只允許乙個寫程序往檔案中寫資訊;

③ 任一寫程序在完成寫操作之前不允許其它讀程序或寫程序工作;

④ 寫程序執行寫操作前,應讓已有的讀程序和寫程序全部退出。

寫者優先問題分析:
1:寫程序與寫程序和寫程序與讀程序要互斥訪問資料集。

2:當沒有寫程序正在訪問共享資料集的時候,多個讀程序可以同時訪問。

3:當有程序在訪問資料集的時候,後續等待的寫程序優先訪問。

需要用到的變數和訊號量:

互斥訊號量wmutex實現寫程序之間的互斥,互斥訊號量rmutex實現讀程序和寫程序之間的互斥。 兩個整型變數:wcountrcount記錄等待的寫程序數量和正在讀的讀程序數量。 互斥訊號mutex1mutex2用來實現程序對共享變數wcountrcount的互斥訪問,

int rcount=1 , wcount=1;

semaphore wmutex=1, rmutex=1,mutex1=1,mutex2=1;

cobegin

process writer_i()

process reader_i()

coend

當在讀程序進行讀操作時,如果有寫程序進入,寫程序會獲得訊號量mutex1

並且等待訊號量rmutex. 此時如果再有讀程序,將不會再獲得訊號量mutex1(即讀程序會等待) ,直到所有正在讀的程序完成,等待的寫程序將獲得rmutex進行寫操作。保證了當讀程序正在讀的時候,等待的寫程序優先。

當在寫程序進行寫操作時,因為寫程序始終獲得訊號量rmutex,只有寫程序的數量變成0時才會釋放,所以讀程序會一直等待。保證了當寫程序正在寫的時候,等待的寫程序優先。

「讀者 寫者問題」的寫者優先演算法實現

讀者一寫者問題是乙個用訊號量實現的經典程序同步問題。在系統中,乙個資料集 如檔案或記錄 被幾個併發程序共享,這些執行緒分兩類,一部分只要求進行復操作,稱之為 讀者 另一類要求寫或修改操作,我們稱之為 寫者 一般而言,對乙個資料集,為了保證資料的完整性 正確性,允許多個讀者程序同時訪問,但是不允許乙個...

讀者寫者問題 讀者優先 python測試)

總結乙個資料物件若被多個併發程序所共享,且其中一些程序只要求讀該資料物件的內容,而另一些 程序則要求寫操作,對此,把只想讀的程序稱為 讀者 而把要求寫的程序稱為 寫者 在 讀者 寫著問題中,任何時刻要求 寫者 最多隻允許有乙個,而讀者則允許有多個。因為多個 讀者的行為互不干擾,他們只是讀資料,而不改...

讀者寫者問題

生產者消費者問題一樣,讀者寫者也是乙個非常著名的同步問題。讀者寫者問題描述非常簡單,有乙個寫者很多讀者,多個讀者可以同時讀檔案,但寫者在寫檔案時不允許有讀者在讀檔案,同樣有讀者在讀檔案時寫者也不去能寫檔案。上面是讀者寫者問題示意圖,類似於生產者消費者問題的分析過程,首先來找找哪些是屬於 等待 情況。...