21讀者 寫者問題

2021-10-14 16:31:44 字數 982 閱讀 4899

1、 問題描述:有讀者和寫者兩組併發程序,共享乙個檔案,當兩個以上的讀程序同時訪問共享資料時不會產生***,若某個寫程序和其他程序同時訪問共享數時,則可能導致資料不一致錯誤。因此要求:1:允許多個讀者同時對檔案執行讀操作 2:只允許乙個寫者往檔案中寫資訊;3:任一寫者在完成寫操作之前不允許其它讀者寫工作 4:寫者執行寫操作之前,應讓已有的讀者和寫者全部退出。

2、 關係分析:讀者和寫者是互斥的,寫者和寫者也是互斥的,而讀者和讀者不存在互斥問題

3、 整理思路:兩個程序,即讀者和寫者。寫者和任何程序互斥,用互斥訊號量p操作,v操作即可解決。讀者的問題比較複雜,它必須實現與寫者互斥的同時還要實現與其他讀者的同步,因此,用到了乙個計數器,用來判斷當前是否有讀者讀檔案。當有讀者的時候,寫者無法寫檔案,此時讀者會一直占用檔案,當沒有讀者的時候才可以寫檔案。同時這裡不同讀者對計數器的訪問也是互斥的。

4、 訊號量設定:設定count為計數器,用來記錄當前讀者數量初始值為0;設定mutex為互斥訊號量,用於保護更新count變數時的互斥;設定互斥訊號量rw用於保護讀者和寫者的互斥訪問。

5、 描述**如下:(讀程序優先)

int count=0; //用於記錄當前的讀者數量

semaphore mutex=1; //用於保護戶更新count變數時的互斥

semaphpore rw=1; //用於保證讀者和寫者互斥地訪問檔案

writer()}

reader()}

6、 寫程序優先(相對的):有寫程序請求訪問,這時應禁止後續程序的請求,等待已在共享檔案的讀程序執行完畢,則立即讓寫程序執行,只有無寫程序執行的情況下才允許程序再次執行。

int count=0;//用於記錄當前的讀者數量

semaphore mutex=1;//用於保護更新count變數時的互斥

semaphore rw=1;//用於保證讀者和寫者互斥地訪問檔案

semaphore w=1 //用於實現「寫優先」

write()}

reader()}

讀者寫者問題

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

讀者寫者問題

問題簡述 讀者 寫者問題的讀寫操作限制 包括讀者優先和寫者優先 1 寫 寫互斥,即不能有兩個寫者同時進行寫操作。2 讀 寫互斥,即不能同時有乙個執行緒在讀,而另乙個執行緒在寫。3 讀 讀允許,即可以有乙個或多個讀者在讀。讀者優先的附加限制 如果乙個讀者申請進行讀操作時已有另乙個讀者正在進行讀操作,則...

讀者 寫者問題

讀者 寫者問題 讀者 寫者問題 readers writers problem 也是乙個經典的併發程式設計問題,是經常出現的一種同步問題。計算機系統中的資料 檔案 記錄 常被多個程序共享,但其中某些程序可能只要求讀資料 稱為讀者 reader 另一些程序則要求修改資料 稱為寫者 writer 就共享...