有讀者和寫者兩組併發程序,共享乙個檔案,當兩個或兩個以上的讀程序同時訪問共享資料時不會產生***,但若某個寫程序和其他程序(讀程序或寫程序)同時訪問共享資料時則可能導致資料不一致的錯誤。
因此要求:
①允許多個讀者可以同時對檔案執行讀操作;
②只允許乙個寫者往檔案中寫資訊;
③任一寫者在完成寫操作之前不允許其他讀者或寫者工作;
④寫者執行寫操作前,應讓已有的讀者和寫者全部退出。
兩類程序:寫程序、讀程序
互斥關係:寫程序----寫程序、寫程序----讀程序。讀程序與讀程序不存在互斥問題。
①寫者程序和任何程序都互斥,設定乙個互斥訊號量rw,在寫者訪問共享檔案前後分別執行p、v操作。
②讀者程序和寫者程序也要互斥,因此讀者訪問共享檔案前後也要對rw執行p、v操作。
③如果所有讀者程序在訪問共享檔案之前都執行p(rw)操作,那麼會導致各個讀程序之間也無法同時訪問檔案。讀者寫者問題的核心思想一一怎麼處理該問題呢?
p(rw)和bv(rw)其實就是對共享檔案的「加鎖」和「解鎖」。既然各個讀程序需要同時訪問,而讀程序與寫程序又必須互斥訪問,那麼我們可以讓第乙個訪問檔案的讀程序「加鎖」,讓最後乙個訪問完檔案的讀程序「解鎖」。可以設定乙個整數變數 count來記錄當前有幾個讀程序在訪問檔案。
讀者-寫者問題為我們解決複雜的互斥問題提供了乙個參考思路。
其核心思想在於設定了乙個計數器 count用來記錄當前正在訪問共享檔案的讀程序數。我們可以用count的值來判斷當前進入的程序是否是第乙個/最後乙個讀程序,從而做出不同的處理。
另外,對 count變數的檢查和賦值不能一氣呵成導致了一些錯誤,如果需要實現「一氣呵成」,自然應該想到用互斥訊號量。
最後,還要認真體會是如何解決「寫程序飢餓」問題的。
讀者寫者問題
生產者消費者問題一樣,讀者寫者也是乙個非常著名的同步問題。讀者寫者問題描述非常簡單,有乙個寫者很多讀者,多個讀者可以同時讀檔案,但寫者在寫檔案時不允許有讀者在讀檔案,同樣有讀者在讀檔案時寫者也不去能寫檔案。上面是讀者寫者問題示意圖,類似於生產者消費者問題的分析過程,首先來找找哪些是屬於 等待 情況。...
讀者寫者問題
問題簡述 讀者 寫者問題的讀寫操作限制 包括讀者優先和寫者優先 1 寫 寫互斥,即不能有兩個寫者同時進行寫操作。2 讀 寫互斥,即不能同時有乙個執行緒在讀,而另乙個執行緒在寫。3 讀 讀允許,即可以有乙個或多個讀者在讀。讀者優先的附加限制 如果乙個讀者申請進行讀操作時已有另乙個讀者正在進行讀操作,則...
讀者 寫者問題
讀者 寫者問題 讀者 寫者問題 readers writers problem 也是乙個經典的併發程式設計問題,是經常出現的一種同步問題。計算機系統中的資料 檔案 記錄 常被多個程序共享,但其中某些程序可能只要求讀資料 稱為讀者 reader 另一些程序則要求修改資料 稱為寫者 writer 就共享...