操作系統(tǒng)生產(chǎn)者與消費(fèi)者課程設(shè)計(jì)_第1頁(yè)
操作系統(tǒng)生產(chǎn)者與消費(fèi)者課程設(shè)計(jì)_第2頁(yè)
操作系統(tǒng)生產(chǎn)者與消費(fèi)者課程設(shè)計(jì)_第3頁(yè)
操作系統(tǒng)生產(chǎn)者與消費(fèi)者課程設(shè)計(jì)_第4頁(yè)
操作系統(tǒng)生產(chǎn)者與消費(fèi)者課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

v1.0可編寫可改正《操作系統(tǒng)》課程設(shè)計(jì)生產(chǎn)者和花費(fèi)者問題系院:計(jì)算機(jī)科學(xué)系學(xué)生姓名:吳偉學(xué)號(hào):01專業(yè):軟件工程年級(jí):0701B達(dá)成日期:2009年11月指導(dǎo)教師:劉栓1v1.0可編寫可改正一、課程設(shè)計(jì)的性質(zhì)與任務(wù)1、生產(chǎn)者-花費(fèi)者問題是很經(jīng)典很擁有代表性的進(jìn)度同步問題,計(jì)算機(jī)中的好多同步問題都可抽象為生產(chǎn)者-花費(fèi)者問題,經(jīng)過本實(shí)驗(yàn)的練習(xí),希望能加深學(xué)生對(duì)進(jìn)度同步問題的認(rèn)識(shí)與理解。2、熟習(xí)VC的使用,培育和提升學(xué)生的剖析問題、解決問題的能力。二、課程設(shè)計(jì)的內(nèi)容及其要求1.實(shí)驗(yàn)內(nèi)容以生產(chǎn)者/花費(fèi)者模型為依照,在Windows2000環(huán)境下創(chuàng)立一個(gè)控制臺(tái)進(jìn)度,在該進(jìn)度中創(chuàng)立n個(gè)線程模擬生產(chǎn)者和花費(fèi)者,實(shí)現(xiàn)進(jìn)度(線程)的同步與互斥。2.實(shí)驗(yàn)要求學(xué)習(xí)并理解生產(chǎn)者/花費(fèi)者模型及其同步/互斥規(guī)則;學(xué)習(xí)認(rèn)識(shí)Windows同步對(duì)象及其特征;熟習(xí)實(shí)驗(yàn)環(huán)境,掌握有關(guān)API的使用方法;設(shè)計(jì)程序,實(shí)現(xiàn)生產(chǎn)者/花費(fèi)者進(jìn)度(線程)的同步與互斥;提交實(shí)驗(yàn)報(bào)告。三、課程設(shè)計(jì)的時(shí)間安排課程設(shè)計(jì)時(shí)間8課時(shí)四、課程設(shè)計(jì)的實(shí)驗(yàn)環(huán)境本實(shí)驗(yàn)是在winxp+環(huán)境下實(shí)現(xiàn)的,利用WindowsSDK編制實(shí)例程序。因此試驗(yàn)需要在windows下安裝VC后進(jìn)行。VC是一個(gè)集成開發(fā)環(huán)境,此中包括了WindowsSDK全部工具和定義;因此安裝了VC后就不用特地安裝SDK了。2v1.0可編寫可改正五、正文1、實(shí)驗(yàn)程序的構(gòu)造圖(流程圖);開始WaitProductsWaitBufferConsumeProduceWhileconsumeWhileproduce結(jié)束2、數(shù)據(jù)構(gòu)造及信號(hào)量定義的說明;CreateThread功能——?jiǎng)?chuàng)立一個(gè)在調(diào)用進(jìn)度的地點(diǎn)空間中履行的線程格式HANDLECreateThread(LPSECURITY_ATTRIBUTESlpThreadAttributes,DWORDdwStackSize,LPTHREAD_START_ROUTINElpStartAddress,3v1.0可編寫可改正LPVOIDlpParamiter,DWORDdwCreationFlags,LpdwordlpThread);參數(shù)說明lpThreadAttributes——指向一個(gè)LPSECURITY_ATTRIBUTES(新線程的安全性描繪符)。dwStackSize——定義原始貨倉(cāng)大小。lpStartAddress——指向使用LPTHRAED_START_ROUTINE種類定義的函數(shù)。lpParamiter——定義一個(gè)給進(jìn)度傳達(dá)參數(shù)的指針。dwCreationFlags——定義控制線程創(chuàng)立的附帶標(biāo)記。lpThread——保留線程標(biāo)記符(32位)CreateMutex功能——?jiǎng)?chuàng)立一個(gè)命名或匿名的互斥量對(duì)象格式HANDLECreateMutex(LPSECURITY_ATTRIBUTESlpMutexAttributes,BOOLbInitialOwner,LPCTSTRlpName);參數(shù)說明lpMutexAttributes——一定取值NULL。bInitialOwner——指示目前線程能否立刻擁有該互斥量(即立刻加鎖)。lpName——互斥量名稱。CreateSemaphore功能——?jiǎng)?chuàng)立一個(gè)命名或匿名的信號(hào)量對(duì)象格式HANDLECreateSemaphore(LPSECURITY_ATTRIBUTESlpSemaphoreAttributes,LONGlInitialCount,LONGlMaximumCount,LPCTSTRlpName);4v1.0可編寫可改正參數(shù)說明lpSemaphoreAttributes——一定取值NULL。lInitialCount——信號(hào)量的初始值。該值大于0,但小于lMaximumCount指定的最大值。lMaximumCount——信號(hào)量的最大值。lpName——信號(hào)量名稱。(4)WaitForSingleObject功能——使程序處于等候狀態(tài),直到信號(hào)量hHandle出現(xiàn)(即其值大于等于1)或超過規(guī)定的等候時(shí)間格式DWORDWaitForSingleObject(HANDLEhHandle,DWORDdwMilliseconds);參數(shù)說明hHandle——信號(hào)量指針。dwMilliseconds——等候的最長(zhǎng)時(shí)間(INFINITE為無窮等候)。(5)ReleaseSemaphore功能——對(duì)指定信號(hào)量加上一個(gè)指定大小的量。成功履行則返回非0值格式BOOLReleaseSemaphore(HANDLEhSemaphore,LONGlReleaseCount,LPLONGlppreviousCount);參數(shù)說明hSemaphore——信號(hào)量指針。lReleaseCount——信號(hào)量的增量。lppreviousCount——保留信號(hào)量目前值。(6)ReleaseMutex功能——翻開互斥鎖,即把互斥量加1。成功調(diào)用則返回0格式5v1.0可編寫可改正BOOLReleaseMutex(HANDLEhMutex);參數(shù)說明hMutex——互斥量指針。(7)InitializeCriticalSection功能——初始化臨界區(qū)對(duì)象格式VOIDInitializeCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);參數(shù)說明lpCriticalSection——指向臨界區(qū)對(duì)象的指針。(8)EnterCriticalSection功能——等候指定臨界區(qū)對(duì)象的全部權(quán)格式VOIDenterCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);參數(shù)說明lpCriticalSection——指向臨界區(qū)對(duì)象的指針。LeaveCriticalSection功能——開釋指定臨界區(qū)對(duì)象的全部權(quán)格式VOIDLeaveCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);參數(shù)說明lpCriticalSection——指向臨界區(qū)對(duì)象的指針。3、實(shí)驗(yàn)的步驟;翻開VC,選擇菜單項(xiàng)file->new,選擇projects選項(xiàng)卡并成立一個(gè)名為"R_WP1"的win32consoleapplicatoin工程;創(chuàng)立時(shí)注意指定創(chuàng)立該工程的目錄;(2)在工程中創(chuàng)立源文件"":選擇菜單項(xiàng)project->addtoproject->files,在選擇框中輸入自己想要?jiǎng)?chuàng)立的文件名,這里是"";在接下來咨詢能否創(chuàng)立新文件時(shí)回答"yes";而后6v1.0可編寫可改正經(jīng)過Workspace->FileView->SourceFiles翻開該文件,在此中編寫源文件并保留.(3)經(jīng)過調(diào)用菜單命令項(xiàng)build->buildall進(jìn)行編譯連結(jié),能夠在指定的工程目錄下獲得debug->程序,而后把給定的文件存入該debug目錄下,就能夠在控制臺(tái)進(jìn)入該debug目錄運(yùn)轉(zhuǎn)程序了。需要重申的是在創(chuàng)立數(shù)據(jù)文件時(shí),因?yàn)椴暗轿募袷絾栴},最幸虧記事本中手工逐一輸入數(shù)據(jù),而不要拷貝粘貼數(shù)據(jù)。4、主要算法創(chuàng)立生產(chǎn)者和花費(fèi)者線程for(i=0;i<(int)n_Thread;i++){if(Thread_Info[i].entity=='P')h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Produce),&(Thread_Info[i]),0,NULL);elseh_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Consume),&(Thread_Info[i]),0,NULL);}生產(chǎn)者進(jìn)度voidProduce(void*p){n",m_serial);n",m_serial,ProducePos);Buffer_Critical[ProducePos]=m_serial;printf("Producer%2dfinishproducing:\n",m_serial);printf("position[%2d]:%3d\n",ProducePos,Buffer_Critical[ProducePos]);7v1.0可編寫可改正算機(jī)操作系統(tǒng).西安電子科技大學(xué)第一版社.2007年2月【2】張堯?qū)W等編著,計(jì)算機(jī)操作系統(tǒng)教程,清華第一版社?!?】嚴(yán)蔚敏,吳偉民編著,數(shù)據(jù)構(gòu)造,清華大學(xué)第一版社。2002【4】陳向群編著,操作系統(tǒng)教程,北京大學(xué)第一版社,8v1.0可編寫可改正【5】鄭莉等編著,C++語(yǔ)言設(shè)計(jì)。北京:清華大學(xué)第一版社.2000六、指導(dǎo)教師考語(yǔ)署名:年代日課程設(shè)計(jì)成績(jī)附:課程設(shè)計(jì)源代碼:#include<>#include<>#include<>#include<string>#include<>hread_request[k]=-1;Thread_Info[j].n_request=0;}erial;inFile>>Thread_Info[n_Thread].entity;9v1.0可編寫可改正inFile>>Thread_Info[n_Thread].delay;charc;(c);while(c!='\n'&&!()){inFile>>Thread_Info[n_Thread].thread_request[Thread_Info[n_Thread].n_request++];(c);}n_Thread++;}erial;charTemp_entity=Thread_Info[j].entity;doubleTemp_delay=Thread_Info[j].delay;printf("\nthread%2d%c%f",Temp_serial,Temp_entity,Temp_delay);intTemp_request=Thread_Info[j].n_request;for(intk=0;k<Temp_request;k++)printf("%d",Thread_Info[j].thread_request[k]);cout<<endl;}printf("\n\n");ntity=='P')h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Produce),&(Thread_Info[i]),0,NULL);elseh_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Consume),&(Thread_Info[i]),0,NULL);}10v1.0可編寫可改正\n");getch();return0;}_request;j++)if(Thread_Info[i].thread_request[j]==req)returnTRUE;returnFALSE;}n",m_serial);n",m_serial,ProducePos);Buffer_Critical[ProducePos]=m_serial;printf("Producer%2dfinishproducing:\n",m_serial);printf("position[%2d]:%3d\n",ProducePos,Buffer_Critical[ProducePos]);使生產(chǎn)者寫的緩沖區(qū)能夠被多個(gè)花費(fèi)者使用,實(shí)現(xiàn)讀寫同步;ReleaseSemaphore(h_Semaphore[m_serial],n_Thread,NULL);}//花費(fèi)者進(jìn)度voidConsume(void*p){//局部變量申明;DWORDwait_for_semaphore,m_delay;intm_serial,m_requestNum;//花費(fèi)者的序列號(hào)和懇求的數(shù)量;intm_thread_request[MAX_THREAD_NUM];//本花費(fèi)線程的懇求行列;提取本線程的信息到當(dāng)?shù)兀?1v1.0可編寫可改正m_serial=((ThreadInfo*)(p))->serial;m_delay=(DWORD)(((ThreadInfo*)(p))->delay*INTE_PER_SEC);m_requestNum=((ThreadInfo*)(p))->n_request;for(inti=0;i<m_requestNum;i++)m_thread_request[i]=((ThreadInfo*)(p))->thread_request[i];Sleep(m_delay);循環(huán)進(jìn)行所需產(chǎn)品的花費(fèi)for(i=0;i<m_requestNum;i++){懇求花費(fèi)下一個(gè)產(chǎn)品printf("Consumer%2d

request

to

consume

%2dproduct\n",m_serial,m_thread_request[i]);//假如對(duì)應(yīng)生產(chǎn)者沒有生產(chǎn),則等候;假如生產(chǎn)了

,同意的花費(fèi)者數(shù)量

-1;實(shí)現(xiàn)了讀寫同步;wait_for_semaphore=WaitForSingleObject(h_Semaphore[m_thread_request[i]],-1);查問所需產(chǎn)品放到緩沖區(qū)的號(hào)intBufferPos=FindBufferPosition(m_thread_request[i]);//開始進(jìn)行詳細(xì)緩沖區(qū)的花費(fèi)辦理,讀和讀在該緩沖區(qū)上仍舊是互斥的;進(jìn)入臨界區(qū)后履行花費(fèi)動(dòng)作;并在達(dá)成此次懇求后,通知此外的花費(fèi)者本處懇求已經(jīng)知足;同時(shí)假如對(duì)應(yīng)的產(chǎn)品使用完成,就做相

溫馨提示

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

評(píng)論

0/150

提交評(píng)論