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