1. 程式人生 > >程序控制的經典問題:讀者寫者問題

程序控制的經典問題:讀者寫者問題

讀者——寫者問題

一個數據檔案被多個程序共享。Reader程序只要求讀檔案,Writer程序要求寫入內容。

合理的同步關係是:

多個讀程序可同時讀;

Writer程序與任何其他程序(包括Reader程序或其他Writer程序)不允許同時訪問檔案。

semaphore rmutex=1,wmutex=1;
int readcount=0;//讀者的數量
讀者Reader : 
begin
repeat
   wait(rmutex);
   if Readcount=0 then wait(wmutex);//判斷是第一位讀者時,佔用wmutex訊號量
   Readcount :=Readcount +1;
   signal(rmutex);
   …
   perform read operation;
   …
   wait(rmutex);
   Readcount :=Readcount -1;
   if Readcount=0 then signal(wmutex);//判斷是最好一位讀者時,釋放wmutex訊號量
   signal(rmutex);

until  false;
end
寫者Writer:
begin
repeat
  wait(wmuter)
  perform write operation;
  signal(wmutex);
until  false;
end