【經典作業系統問題】讀者寫者問題分析

來源:互聯網
上載者:User

       哲學家就餐問題對於互斥訪問有限資源的競爭問題(如I/O裝置)一類的建模過程十分有用。另一個著名的問題是讀者-寫者問題(Courtois
等人,1971),它為資料庫訪問建立了一個模型。例如,設想一個飛機訂票系統,其中有許多競爭的進程試圖讀寫其中的資料。多個進程同時讀資料庫是可以接
受的,但如果一個進程正在更新(寫)資料庫,則所有的其他進程都不能訪問該資料庫,即使讀操作也不行。這裡的問題是如何對讀者和寫者進行編程?圖2-47
給出了一種解法。

      在該解法中,第一個讀者對訊號量db 執行down操作。隨後的讀者只是遞增一個計數器rc。當讀者離開時,它們遞減這個計數器,而最後一個讀者則對訊號量執行up,這樣就允許一個被阻塞的寫者(如果存在的話)可以訪問該資料庫。

在該解法中,隱含著一個需要註解的條件。假設一個讀者正使用資料庫,另一個讀者來了。同時有兩個讀者並不存在問題,第二個讀者被允許進入。如果有第三個和更多的讀者來了也同樣允許。

     現在,假設一個寫者到來。由於寫者的訪問是排他的,不能允許寫者進入資料庫,只能被掛起。只要還有一個讀者在活動,就允許後續的讀者進來。這種策略
的結果是,如果有一個穩定的讀者流存在,那麼這些讀者將在到達後被允許進入。而寫者就始終被掛起,直到沒有讀者為止。如果來了新的讀者,比如,每2秒鐘一
個,而每個讀者花費5秒鐘完成其工作,那麼寫者就永遠沒有機會了。

      為了避免這種情形,可以稍微改變一下程式的寫法:在一個讀者到達,且一個寫者在等待時,讀者在寫者之後被掛起,而不是立即允許進入。用這種方式,在
一個寫者到達時如果有正在工作的讀者,那麼該寫者只要等待這個讀者完成,而不必等候其後面到來的讀者。該解決方案的缺點是,並發度和效率較低。
Courtois等人給出了一個寫者優先的解法。

     



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.