作業系統中讀者 寫者問題的一點疑問

2021-08-03 18:41:30 字數 1059 閱讀 3968

乙個讀者試圖進行讀操作時,如果這時有其他讀者在進行讀操作,他可以直接開始讀操作,而不需要等待。只要有讀者在進行讀操作,寫者就不能寫,但後續讀者可以直接進行讀操作,因此只要只要讀者陸續到來,讀者一到就可以開始讀操作,而寫者程序只能等待,所有讀者都退出才能進行寫操作,這就是讀者優先。

對於這個問題,書中是這麼解決的:設定記錄讀者數量的整型變數readcount,初值為0,當值大於0時,表明有讀者存在,寫者不能進行寫操作;設定互斥訊號量rmutex,初值為1,用於保證多個讀者程序對於readcount的互斥訪問;設定互斥訊號量mutex,初值為1,用於控制寫者程序對於資料區的互斥訪問,**如下:

semaphore rmutex=1; //初始化訊號量rmutex,保證對於readcount的互斥訪問

semaphore mutex=1; //初始化訊號量mutex,保證對於資料區的寫互斥

int readcount=0; //用於記錄讀者數量,初值為0

reader()

}writer()

} }

我本來覺得這段**有兩個地方有問題,在抄書的時候搞懂了第二個疑問,也在這裡說一下吧。

疑問1(見**位置):

if(readcount==0) p(mutex); //如果此為第乙個讀者,阻止寫者進入

這個地方為什麼readcount數量為0的時候要阻止寫者進入呢,雖然是讀者優先,但最開始的時候對於讀者寫者應該是公平的,也就是說一開始寫者是可以寫的,所以我認為此處應該應該改為:

if(readcount>0) p(mutex);

疑問2:

我開始不明白為什麼readcount++和讀操作以及readcount–操作為什麼不放在一起,也就是這樣:

readcount++; //讀者數量加1

p(rmutex);

進行讀操作;

v(rmutex);  

readcount–;

後來明白了,這樣的話readcount只會有兩個值:0和1,而且無法保證能夠同時讀檔案,因為p(rmutex)的存在。 

讀者寫者問題 作業系統

動機 共享資料的訪問 兩種型別使用者 讀者 不需要修改資料 寫者 讀取和修改資料 問題的約束 允許同一時間有多個讀者,但在任何時候只有乙個寫者 當沒有寫者是讀者才能訪問資料 當沒有讀者和寫者時,寫者才能訪問資料 在任何時候只有乙個執行緒能操作共享變數 多個併發程序的資料集共享 rcount 有多少個...

作業系統 讀者 寫者問題

讀者間可以同時訪問資源 任一寫者必須與其他寫者或者讀者互斥訪問共享資源 分析 寫者與任一程序互斥訪問共享資源 讀者互斥訪問readcount變數 1申請對檔案的使用權p mutex 2寫檔案 3釋放對檔案的使用權v mutex 設正在讀的讀者個數readcount初 0 1第乙個讀者來 申請對檔案的...

作業系統 讀者寫者問題

乙個資料檔案或記錄可以被多個程序共享。唯讀的程序為 reader程序 其他程序為 writer程序 允許多個物件同時讀乙個共享物件,但是不允許乙個writer程序和其他reader程序同時共享物件。使用記錄性訊號量解決讀者與寫者問題 互斥訊號量wmutex 實現reader與writer程序間在讀或...