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

2021-10-01 16:25:10 字數 1626 閱讀 5027

讀者優先:

1.寫者、讀者互斥訪問檔案資源。

2.多個讀者可以同時訪問檔案資源。

3.只允許乙個寫者訪問檔案資源。

具體實現:

1.設定訊號量filesrc實現讀寫者對臨界資源的訪問。

2.設定計數器readcount來統計訪問臨界資源的讀者數目,設定訊號量readcountsignal完成對readcount計數器資源的互斥訪問。

/初始化讀者隊列為0,檔案資源的初始值為1/

int readcount =

0;semaphore readcountsignal =

1;reader()

}writer()

}

寫者優先:

1.寫者執行緒的優先順序高於讀者執行緒。

2.當有寫者到來時應該阻塞讀者執行緒的佇列。

3.當有乙個寫者正在寫時或在阻塞佇列時應當阻塞讀者程序的讀操作,直到所有寫者程序完成寫操作時放開讀者程序。

4.當沒有寫者程序時讀者程序應該能夠同時讀取檔案。

具體實現:

1.通過新增訊號量read實現寫者到來時能夠打斷讀者程序。

2.設定訊號量filesrc實現讀寫者對臨界資源的訪問。

3.設定計數器writecount來統計當前阻塞的寫者程序的數目,設定訊號量writecountsignal完成對writecount計數器資源的互斥訪問。

4.設定計數器readcount來統計訪問臨界資源的讀者數目,設定訊號量readcountsignal完成對readcount計數器資源的互斥訪問。

/*初始化讀者、寫者隊列為0,初始化令牌資源、讀寫計數器資源的初始值為1*/

int readcount =

0;int writecount =

0;semaphore read =

1;semaphore readcountsignal =

1;semaphore writecountsignal =

1;reader()

}writer()

}

公平競爭:

1.優先順序相同。

2.寫者、讀者互斥訪問。

3.只能有乙個寫者訪問臨界區。

4.可以有多個讀者同時訪問臨界資源。

具體實現:

1.設定file訊號量實現對臨界資源的互斥訪問。

2.設定計數器readcount實現多個讀者訪問臨界資源,通過設定訊號量readcountsignal實現對readcount計數器的互斥訪問。

3.設定訊號量keysignal實現讀者和寫者的公平競爭(令牌)。

4.設定訊號量onesignal實現只有讀者佇列或寫者阻塞在keysignal(對令牌資源的訪問控制)。

/* 讀者佇列初始值為0,其他資源初始值為1*/

int readcount =

0;semaphore keysignal =

1;semaphore onesignal =

1;semaphore readcountsignal =

1;reader()

}writer()

}

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

讀者優先的解決方案 互斥訊號量wrt,初值是1,代表乙個共享檔案,解決 讀 寫 互斥,寫 寫 互斥。乙個記數器,即整型變數readcount,記錄讀者數,初值是0。來乙個讀者,readcount加1 當readcount 1表示是第乙個讀者,則需要執行p操作搶占檔案 否則表示已有讀者在安全的讀資料。...

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

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

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

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