讀者寫者問題(讀者優先,寫者優先 ,讀寫公平)

2021-09-01 09:12:44 字數 2228 閱讀 6721

讀者優先的解決方案:

互斥訊號量wrt,初值是1,代表乙個共享檔案,解決「讀-寫」互斥,「寫-寫」互斥。

乙個記數器,即整型變數readcount,記錄讀者數,初值是0。 來乙個讀者, readcount加1 當readcount =1表示是第乙個讀者, 則需要執行p操作搶占檔案;否則表示已有讀者在安全的讀資料。 走乙個讀者,readcount減1 當readcount =0表示是最後乙個讀者,則需要v操作釋放資源;否則表示還有讀者在讀資料。

readcount 為多個讀者共享的變數,是臨界資源。用互斥訊號量mutex控制, mutex初值是1。

**:

int readcount=0; 

semaphore mutex=1, wrt=1 ;

讀者程序:

wait (mutex);

readcount++;

if (readcount == 1)

wait(wrt);

signal (mutex);

… reading is performed

…wait (mutex);

readcount--;

if (readcount == 0)

signal (wrt);

signal (mutex);

寫者程序:

wait(wrt);

…writing is performed

…signal(wrt);

解決方案:

在讀者優先的基礎上

增加訊號量r,初值是1:當至少有乙個寫程序準備訪問資料區時,用於禁止所有的讀程序。

增加乙個記數器,即整型變數writecount,記錄寫者數,初值是0。 writecount為多個寫者共享的變數,是臨界資源。用互斥訊號量mutex2控制, mutex2初值是1。

增加mutex3,初值是1:在r上不允許建造長佇列,否則寫程序將不能跳過這個佇列,因此,只允許乙個讀程序在r上排隊,而所有其他讀程序在等待r之前,在訊號量mutex3上排隊。

**:

int readcount=0, writecount=0; 

semaphore mutex1=1, mutex2=1, mutex3=1, w=1, r=1 ;

讀者程序:

p(mutex 3);

p(r);

p(mutex 1);

readcount++;

if (readcount == 1 )

p(w);

v(mutex 1);

v(r);

v(mutex 3);

reading is performed

p(mutex 1);

readcount --;

if (readcount == 0 )

v(w);

v(mutex 1);

寫者程序:

p(mutex 2);

writecount++;

if (writecount == 1 )

p(r);

v(mutex 2);

p(w);

writing is performed

v(w);

p(mutex 2);

writecount --;

if (writecount == 0)

v(r);

v(mutex 2);

**:

int readcount=0; 

semaphore mutex=1, rw=1 w=1;

讀者程序:

wait (w);

wait (mutex);

if (readcount == 0)

wait(rw);

readcount++;

signal (mutex);

signal (w);

… reading is performed

…wait (mutex);

readcount--;

if (readcount == 0)

signal (rw);

signal (mutex);

寫者程序:

wait(w);

wait(rw);

…writing is performed

…signal(rw);

signal(w);

讀者寫者問題(讀者優先 寫者優先 公平競爭)

讀者優先 1.寫者 讀者互斥訪問檔案資源。2.多個讀者可以同時訪問檔案資源。3.只允許乙個寫者訪問檔案資源。具體實現 1.設定訊號量filesrc實現讀寫者對臨界資源的訪問。2.設定計數器readcount來統計訪問臨界資源的讀者數目,設定訊號量readcountsignal完成對readcount...

經典排程問題 讀者優先 寫者優先演算法

建立乙個包含n 個執行緒的控制台程序。用這n 個執行緒來表示n個讀者或寫者。每個執行緒按相應測試資料檔案的要求,進行讀寫操作。請用訊號量機制分別實現讀者優先和寫者優先的讀者 寫者問題。讀者優先 如果乙個讀者申請進行讀操作時已有另一讀者正在進行讀操作,則該讀者可直接開始讀操作。寫者優先 如果乙個讀者申...

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

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