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


無論是三種中的哪一種,在沒有程序占用臨界區時,讀者與寫者之間的競爭都是公平的,所謂的不公平(優先)是在讀者優先和寫者優先中,優先方只要占有了臨界區,那么之后所有優先方的程序(讀者或寫者)便占有了臨界區的主導權,除非沒有優先方程序提出要求,否則始終是優先方的程序占有臨界區,反觀非優先方即使某一次占有了臨界區,那么釋放過后,回到了沒有程序占有臨界區的情況,非優先方又要重新和優先方公平競爭,所謂的優先可以理解為優先方在占有臨界區后便可以對臨界區進行"壟斷"

在讀者優先中,當讀者在里面占用文件的時候,外邊的讀者可以直接讀取文件。在寫者優先中,每個寫者操作文件以后會優先叫醒等待的寫者。 就像是我們上課占座,自己的同學上完第一節課可以直接把座位讓給我們。

讀者優先

即使寫者發出了請求寫的信號,但是只要還有讀者在讀取內容,就還允許其他讀者繼續讀取內容,直到所有讀者結束讀取,才真正開始寫

1.有讀者在讀后面來的讀者可以直接進入臨界區,而已經在等待的寫者繼續等待直到沒有任何一個讀者時。

2.讀者之間不互斥,寫者之間互斥,只能一個寫,可以多個讀,

3.讀者寫者之間互斥,有寫者寫則不能有讀者讀
4.如果在讀訪問非常頻繁的場合,有可能造成寫進程一直無法訪問文件的局面

寫者優先

 如果有寫者申請寫文件,在申請之前已經開始讀取文件的可以繼續讀取,但是如果再有讀者申請讀取文件,則不能夠讀取,只有在所有的寫者寫完之后才可以讀取

1.寫者線程的優先級高於讀者線程。

2.當有寫者到來時應該阻塞讀者線程的隊列。
3.當有一個寫者正在寫時或在阻塞隊列時應當阻塞讀者進程的讀操作,直到所有寫者進程完成寫操作時放開讀者進程。
4.當沒有寫者進程時讀者進程應該能夠同時讀取文件。

讀寫公平:
1.優先級相同。
2.寫者、讀者互斥訪問。
3.只能有一個寫者訪問臨界區。
4.可以有多個讀者同時訪問臨界資源。

讀者寫者在訪問文件之前都得排隊等待。
基本的實現:對於讀者和寫者在P、V操作上基本相同,都是先等待queue信號量,然后再等待rw。
稍微不同的是由於讀者可以同時訪問文件,若有讀者已經在訪問文件,其他的讀者不用在申請rw信號量。

代碼可參考     https://blog.csdn.net/william_munch/article/details/84256690


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM