版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 操作系統(tǒng)課程設計</b></p><p> 題目名稱: 讀者與寫者 </p><p><b> 目錄</b></p><p> 問題描述................................................3~4</p><
2、;p> 系統(tǒng)設計................................................5~9</p><p> 源代碼清單.............................................9~19</p><p> 運行結果測試與分析.......................................20</p&
3、gt;<p> 總結與心得...............................................20</p><p><b> 問題描述</b></p><p> 讀者與寫者問題主要是涉及到操作系統(tǒng)中的進程同步、互斥以及信號量機制的概念,可以有多個讀者進程同時進行,但是當寫者進程到來時,所有的讀者進程都要進入等待狀態(tài),而且寫
4、者進程只能獨立。</p><p> 實現讀者與寫者的總體思路是使用多線程,每當一個讀者到來時,如果當前沒有寫者進程正在進行,則立即開啟一個讀者線程,如果當前有寫者正在進行,則此讀者應當進入等待狀態(tài),直到寫者進程完成,每當一個寫者到來時,若此時有讀者正在進行,則立即將正在進行的讀者設置為等待狀態(tài),開啟寫者進程,并且當下一個寫者到來時,只能進入等待狀態(tài),除非當前寫者完成。</p><p>&
5、lt;b> 進程同步與互斥:</b></p><p> 進程互斥是多處理機系統(tǒng)中的典型間接作用,通常是兩個或兩個以上進程需要同時訪問某個共享變量,在這個程序中此共享變量就是共享文件。我們一般將發(fā)生能夠共享變量的程序段稱為臨界區(qū)。兩個進程不能同時進入臨界區(qū),否則就會導致數據的不一致,產生與時間有關的錯誤。我們解決互斥問題時要遵循互斥和公平兩個原則,即任意時刻只允許一個進程進入臨界區(qū),且不能讓任
6、意進程進入無限的等待。</p><p> 進程同步是進程之間的直接作用。簡單的理解就是,若有兩個進程A,B,若只有當A進程完成后B進程才能夠啟動,則說A進程與B進程是同步的。</p><p> 實現同步與互斥有多種機制,比如信號量、管程、會合、分布式系統(tǒng),在這個程序中簡單的用信號量來實現。</p><p><b> 信號量</b><
7、/p><p> 信號量機制是荷蘭學者Dijkstra于1955提出的一種解決進程同步與互斥的有效工具在此機制中,信號量S是一個整數,S大于等于零代表可供并發(fā)進程使用的資源數,當S小于零時表示正在等待使用臨界區(qū)的進程數。Dijkstra同時提出了對信號量操作的PV原語:</p><p><b> P原語操作動作:</b></p><p><
8、b> 、S減一;</b></p><p> 、若S減一后仍大于或等于零,則進程繼續(xù)進行。</p><p> 、若S減一小于零,則進程被阻塞后進入與該信號量相對應的隊列中,然后轉進程調度。</p><p><b> V原語操作動作:</b></p><p><b> 、S加一;<
9、/b></p><p> 、若S加一后結果大于零,則進程繼續(xù);</p><p> 、若S加一后結果小于或等于零,則從該信號的等待隊列中喚醒一等待進程再返回原進程繼續(xù)執(zhí)行或轉向進程調度。</p><p> PV操作對于每一個進程來說,都只能進行一次,而且必須成對使用。在PV執(zhí)行期間不允許有中斷發(fā)生。信號量機制分整型信號量機制、記錄型信號量機制、and型信號
10、量機制以及信號量集,在這個程序中使用的是整型信號量機制。</p><p> 假設共享文件是一個JTextArea,在這個JTextArea中,可以向其寫入文件,也可以從其中讀取文件,遵循的原則是,多個讀者可以同時進行,但寫者只能單獨進行,而且寫者優(yōu)先。當一個讀者到來時,先判斷有無寫者正在進行,可用一個布爾變量bwrite,當其為true時表示有寫者正在進行,表示此時來到的讀者只能進入等待狀態(tài)。當其為false時
11、,表示暫無寫者正在進行,來到的讀者可以立即開啟。</p><p> 讀者到來:空閑情況下,直接開啟一個讀者,就是將共享文件中的內容簡單的讀取出,并且顯示在相應讀者的顯示框中。當有讀者正在進行時,由于多個讀者可以同時進行,因此這種情況下也是立即開啟一個讀者進程,同時讀取。當有寫者正在進行時,由于寫者優(yōu)先,因此到來的讀者必須進入等待狀態(tài),直到所有寫者進程全部完成。一段時間后,這個讀者應當完成,并且要釋放資源,即共享
12、文件的被引用次數減一。</p><p> 寫者到來:空閑情況下,直接開啟一個寫者,由于寫者只能單獨進行,因此開啟一個寫者后要將共享區(qū)鎖住,禁止其他讀者或者寫者進入。若此前有讀者正在進行,則正在進行的讀者馬上進入等待狀態(tài),進入等待隊列,立即將此寫者開啟,直到該寫者完成,在從等待隊列中拿出處于等待的讀者繼續(xù)。若此前有寫者正在進行,則剛到的這個寫者要進入等待隊列。而且若后面還有讀者到來,則當前寫者完成后,要先判斷寫者
13、等待隊列是否為空,若寫者等待隊列為非空,則應先喚醒處于等待狀態(tài)的寫者,直到寫者等待隊列為空,再去喚醒處于等待狀態(tài)的讀者。</p><p> 這里要用到兩個隊列:讀者等待隊列,寫者等待隊列。</p><p> 產生java.lang.IllegalMonitorStateException異常:原因是沒有注意notify(),notifyAll(),wait()方法的使用條件,如果當前的
14、線程不是此對象鎖的所有者,卻調用該對象的notify(),notifyAll(),wait()方法。解決方法是在調用wait()的方法前加上synchronized。</p><p> Synchronized:用來修飾一個方法或者一個代碼塊的時候,能夠保證在同一時刻最多只有一個線程執(zhí)行改代碼段。</p><p> 當兩個并發(fā)線程訪問同一個對象Object中的這個synchronize
15、(this)同步代碼塊時,一個時間內只能有一個線程得到執(zhí)行,另一個線程必須等待當前線程執(zhí)行完這個代碼塊以后才能執(zhí)行改代碼塊。</p><p> 一個線程訪問Object的一個synchronize(this)同步代碼塊時,另一個線程任然可以訪問該object中的非synchronize(this)同步代碼塊。</p><p> 當一個線程訪問object的一個synchronize(t
16、his)同步代碼塊時,其他線程對object中所有其他synchronize(this)同步代碼塊的訪問將被阻塞。</p><p><b> 系統(tǒng)設計</b></p><p> 對于該程序的設計,總共設計三個類,Reader、Writer、ReaderWriter,其中讀者與寫者分別實現Runnable接口,每個讀者以及每個寫者對應一個線程每當讀者到來時,開啟一個
17、線程來處理。</p><p> Writer類,每當一個寫者到來時,改變共享文件</p><p><b> 源代碼清單</b></p><p><b> 運行結果測試與分析</b></p><p><b> 結論與心得</b></p><p>
18、 讀者寫者問題是一個經典的并發(fā)程序設計問題,也是一種經常出現的一種同步問題。在這個程序設計的過程中也出現了一些問題。比如產生java.lang.IllegalMonitorStateException異常:原因是沒有注意notify(),notifyAll(),wait()方法的使用條件,如果當前的線程不是此對象鎖的所有者,卻調用該對象的notify(),notifyAll(),wait()方法。解決方法是在調用wait()的方法前加上
19、synchronized。</p><p> Synchronized:用來修飾一個方法或者一個代碼塊的時候,能夠保證在同一時刻最多只有一個線程執(zhí)行改代碼段。</p><p> 當兩個并發(fā)線程訪問同一個對象Object中的這個synchronize(this)同步代碼塊時,一個時間內只能有一個線程得到執(zhí)行,另一個線程必須等待當前線程執(zhí)行完這個代碼塊以后才能執(zhí)行改代碼塊。</p&g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設計實驗報告
- 操作系統(tǒng)課程設計-文件管理實驗報告
- 操作系統(tǒng)課程實驗報告
- 讀者與寫者-操作系統(tǒng)課程設計實驗報告
- 操作系統(tǒng)課程設計實驗報告---io系統(tǒng)調用開銷比較
- 操作系統(tǒng)課程設計實驗報告--內存的連續(xù)分配算法
- 操作系統(tǒng)課程設計——操作系統(tǒng)課程設計模擬操作系統(tǒng)
- 操作系統(tǒng)實驗報告 (5)
- 操作系統(tǒng)實驗報告模板
- 操作系統(tǒng)課程設計報告
- 課程設計報告--操作系統(tǒng)
- 操作系統(tǒng)課程設計報告
- 《操作系統(tǒng)》課程設計報告
- 操作系統(tǒng)課程設計報告
- 操作系統(tǒng)課程設計報告
- 操作系統(tǒng)課程設計-- 操作系統(tǒng)
- 操作系統(tǒng)作業(yè)調度實驗報告
- 操作系統(tǒng)課程設計報告2014217151
- 《操作系統(tǒng)原理》課程設計報告
- 操作系統(tǒng)課程設計報告2
評論
0/150
提交評論