進程同步生產(chǎn)者與消費者_第1頁
進程同步生產(chǎn)者與消費者_第2頁
進程同步生產(chǎn)者與消費者_第3頁
進程同步生產(chǎn)者與消費者_第4頁
進程同步生產(chǎn)者與消費者_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、頁尉內(nèi)容軟件學(xué)院操作系統(tǒng)實驗報告6專業(yè): 班級: 學(xué)號: 學(xué)生姓名: 指導(dǎo)教師:軟件工程RB軟工互152201560160226王澤華韓新超頁尉內(nèi)容5實驗二:進程同步(生產(chǎn)者與消費者)一. 實驗?zāi)康?) 理解進程競爭資源的現(xiàn)象,進而理解進程的同步于互斥;2) 掌握基本的互斥與同步算法,進一步理解“生產(chǎn)者一消費者”模型;S)通過對“生產(chǎn)者一消費者”問題編程實現(xiàn),了解進程創(chuàng)建、同步信號 量、互斥信號量、臨界區(qū)的創(chuàng)建和使用,初步了解并發(fā)程序設(shè)計方法;4) 進一步理解P、V原語和信號量在線程互斥和同步機制中的運用。二. 實驗屬性該實驗為設(shè)計性實驗。三. 實驗儀器設(shè)備及器材普通PCSS6以上微機四. 實

2、驗理論基礎(chǔ)1、該實驗中使用到相關(guān)的windows API函數(shù):1) create Thread建立新的線程;2) create Mutex創(chuàng)建一個互斥體;5) create Semaphore創(chuàng)建一個新的信號量;4) release Mutex釋放山線程擁有的一個互斥體;5) release Semaphore對指定的信號量增加指定的值;6) wait for Single Object用來檢測handle時間的信號狀態(tài);7 )wait for Multiple Objects true即等待所有信號量有效再往下執(zhí)行,false 當(dāng)其中一個信號量有效時向下執(zhí)行;S)Close Handle關(guān)閉

3、一個內(nèi)核對象。2、數(shù)據(jù)結(jié)構(gòu)用實驗一中的進程就緒隊列,并在此基礎(chǔ)上進行調(diào)度,如 果隊列排序與算法要求不一致則編寫一個排序函數(shù)。S、進程調(diào)度算法:選擇一種進程調(diào)度算法實現(xiàn)。士、主界面設(shè)計:在實驗一的界面上增加一個進程調(diào)度按鈕、被調(diào)進程 的PCB顯示。5、功能測試:從顯示出的就緒隊列狀態(tài)和被調(diào)進程的PCB,查看操作 的正確與否。五實驗步驟60!1234567891i1:1:1:l i主緩區(qū)區(qū)區(qū)區(qū)區(qū)區(qū)區(qū)岡區(qū)區(qū)區(qū)區(qū)兇區(qū)區(qū)區(qū) 亠宀新一 kajm占 m frmol.tim03 占.mol.Bn. 生fes'I摻1-1霾s:l-蠢1-1參滾盪盪<爰區(qū) 3 = 01 編入狀號 放的編 口asB1品

4、 口弄當(dāng)產(chǎn) 亠嚴(yán)的區(qū)號012341000000000費產(chǎn)1(2)結(jié)果分析: 在每個過程中先做P(mutex),后做V(mutex),二者要成對出現(xiàn)。夾在 二者中間的代碼段就是該進程的臨界區(qū)。 對同步信號量full和empty的P, V操作同樣必須成對出現(xiàn),但它們 分別位于不同的程序中。 無論在生產(chǎn)者進程中還是在消費者進程中,兩個P操作的次序不能顛 倒:應(yīng)先執(zhí)行同步信號量的P操作,然后執(zhí)行互斥信號量的P操作。否則可 能造成進程死鎖。六.實驗總結(jié)計算機操作系統(tǒng)中引入了進程后,極大的改善了系統(tǒng)資源的利用率和提 高了系統(tǒng)的喬吐量,但是由于多道環(huán)境中同時存在多個進程,它們共享系統(tǒng) 資源,各自按照各自的方

5、式執(zhí)行,給系統(tǒng)造成了混亂,所以系統(tǒng)必須提供一 種機制管理進程,使這些并發(fā)執(zhí)行的進程之間能有條不紊地運行,能有效地 共享資源和相互合作,使得程序的執(zhí)行具有可再現(xiàn)性,這就是進程同步的主 要任務(wù)。七.附錄#include <iostream>#include <process.h>#include <windows.h>using namespace std;/生產(chǎn)者消費者問題,單個生產(chǎn)者,多個消費者,多個緩沖池/使用信號量 和關(guān)鍵段來實現(xiàn)using namespace std;int gi或const int num = 10; /產(chǎn)生數(shù)據(jù)的個數(shù)const in

6、t size = 土; /緩沖池的大小volatile bool flag = true; /用于消費者線程之間int buPsizeJ; / 緩沖池CRITICAL_SECTION gc; / 關(guān)鍵段HANDLE empty full; / / Semaphoreunsigned int _stdcall pro(PVOID p) / 生產(chǎn)者線程fbr(int i = 0; i <= num ; i+)WaitForSingleObject(emptylXFINITE); / 線程同步EnterCriticalSection(&:gc); / 線程互斥bufTgO = i;co

7、ut « "生產(chǎn)者在n « gi << n號緩沖也放入H « bufTgiJ « endl; gi = (gi+l)%size;Leave CriticalSec tion( &gc);ReleaseSemaphore(fi.ill, 1 .NULL);頁尉內(nèi)容cout « “生產(chǎn)者運行結(jié)朿!” « endl; return 0;unsigned int _stclcall cus(PVOID p) / 消費者線程while(true)WaitForSingleObject(fullJXFINITE);

8、/ 線程同步 if flag = false ) /線程之間的邏輯判斷break;EnterCriticalSection(Srgc); / 線程互斥cout « ”線程 H « GetCurrentThreadId() « M 在緩沖池 H « gj « H 獲取數(shù)據(jù)« bufTgj << endl;if( bufTgj" = num ) / 結(jié)束條件LeaveCriticalSection (& gc); ReleaseSemaphore(fulL 1 ,NULL); flag = false; br

9、eak;gj = (gj+l)%size;LeaveCriticalSection (&gc);Sleep(oO);ReleaseSemaphore(empty 1 ,NULL);cout « "消費者線程 M « GetCurrentThreadId() « n 運行結(jié)朿!" « endl;return 0;int main()/相關(guān)變量的定義const int sz = S;gi = gj = 0;InitializeCriucalSection (&gc);empty = CreateSemaphore(NULL,l,4,NULL); fiill = CreateSemaphore(NULL,0,-£-,NULL);HANDLE handsz;hand0 = HAKDLE)_beginchreadex(NULL,0,pro,NULL,0,NULL); / 創(chuàng)建了三個 線程hand13 = (HANDLE)-beginchreadex(NULL,O,cus,NULL.O,NULL);hand2 = (PLNDLE)-beginthreadex(NULL,O,cus,NULL,O,NULL);X7aitForMultipleObjects(sz,han

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論