建立乙個包含n 個執行緒的控制台程序。用這n 個執行緒來表示n個讀者或寫者。每個執行緒按相應測試資料檔案的要求,進行讀寫操作。請用訊號量機制分別實現讀者優先和寫者優先的讀者-寫者問題。
讀者優先:如果乙個讀者申請進行讀操作時已有另一讀者正在進行讀操作,則該讀者可直接開始讀操作。
寫者優先:如果乙個讀者申請進行讀操作時已有另一寫者在等待訪問共享資源,則該讀者必須等到沒有寫者處於等待狀態後才能開始讀操作。
讀者就是優先的。假設a,b都是同時請求,但是a是讀者那麼a優先使用資源,還有一點很重要的就是讀者優先的讀者可以並行執行。而寫著只能單執行緒執行。在執行過程中,只要阻塞的寫者在等待過程中有新的讀者進來那麼他要等待所有讀者完成才能自己釋放自己。
無疑所有寫的操作是優先的,這個過程可能會產生大量阻塞,因為相對較快(本來可以並行的讀者被大量阻塞)。如果資源中沒有寫者那麼讀者依然可以並行,但是一旦出現寫者在等待讀者資源,那麼新的讀者就不能在並行執行,要等待所有寫者執行完畢才可執行讀者。讀者優先和寫者優先是兩個不同的策略方法,方法有相似之處但是也有很大不同,函式需要分開完成。
最主要的排序方式基於時間排序,次要的排序以讀者還是寫者誰優先為準則
讀者優先或者寫者優先的阻塞會導致執行緒開始時間的變化。而不過採用雙佇列乙個存進入時間的排序,乙個存結束時間的排序,修改其中的乙個會影響另乙個佇列中元素值不錯,但是如果不對另乙個佇列進行增/刪是不會觸發堆排序的功能(挺重要的)。
可能有些阻塞時候的等待時間和開始時間改變處理比較複雜,要考慮當前是讀致使阻塞,還是寫致使阻塞,還是前面有寫的資源再等待致使阻塞。要用多個變數維繫系統使得正確的更改執行緒的阻塞時間。
讀者寫者問題(讀者優先,寫者優先 ,讀寫公平)
讀者優先的解決方案 互斥訊號量wrt,初值是1,代表乙個共享檔案,解決 讀 寫 互斥,寫 寫 互斥。乙個記數器,即整型變數readcount,記錄讀者數,初值是0。來乙個讀者,readcount加1 當readcount 1表示是第乙個讀者,則需要執行p操作搶占檔案 否則表示已有讀者在安全的讀資料。...
讀者寫者問題(讀者優先 寫者優先 公平競爭)
讀者優先 1.寫者 讀者互斥訪問檔案資源。2.多個讀者可以同時訪問檔案資源。3.只允許乙個寫者訪問檔案資源。具體實現 1.設定訊號量filesrc實現讀寫者對臨界資源的訪問。2.設定計數器readcount來統計訪問臨界資源的讀者數目,設定訊號量readcountsignal完成對readcount...
讀者寫者問題 讀者優先 python測試)
總結乙個資料物件若被多個併發程序所共享,且其中一些程序只要求讀該資料物件的內容,而另一些 程序則要求寫操作,對此,把只想讀的程序稱為 讀者 而把要求寫的程序稱為 寫者 在 讀者 寫著問題中,任何時刻要求 寫者 最多隻允許有乙個,而讀者則允許有多個。因為多個 讀者的行為互不干擾,他們只是讀資料,而不改...