操作系統(tǒng)(生產(chǎn)者與消費(fèi)者問(wèn)題)_第1頁(yè)
操作系統(tǒng)(生產(chǎn)者與消費(fèi)者問(wèn)題)_第2頁(yè)
操作系統(tǒng)(生產(chǎn)者與消費(fèi)者問(wèn)題)_第3頁(yè)
操作系統(tǒng)(生產(chǎn)者與消費(fèi)者問(wèn)題)_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上實(shí)驗(yàn)二 進(jìn)程的互斥與同步(生產(chǎn)者與消費(fèi)者問(wèn)題)一、 實(shí)驗(yàn)?zāi)康模豪肳indows提供的API函數(shù),編寫(xiě)程序,解決生產(chǎn)者與消費(fèi)者問(wèn)題,實(shí)現(xiàn)進(jìn)程的互斥與同步。二、 實(shí)驗(yàn)內(nèi)容與步驟:本實(shí)驗(yàn)要求設(shè)計(jì)并實(shí)現(xiàn)一個(gè)進(jìn)程,該進(jìn)程擁有一個(gè)生產(chǎn)者線(xiàn)程和一個(gè)消費(fèi)者線(xiàn)程,它們使用N個(gè)不同的緩沖區(qū)(N為一個(gè)確定的數(shù)值,例如N=32)。生產(chǎn)者生產(chǎn)產(chǎn)品,將產(chǎn)品放入緩沖區(qū),如果緩沖區(qū)滿(mǎn)了,就不能生產(chǎn)產(chǎn)品了,等到緩沖區(qū)有空了再生產(chǎn),消費(fèi)者線(xiàn)程消費(fèi)產(chǎn)品,從緩沖區(qū)取出產(chǎn)品消費(fèi),如果緩沖區(qū)是空的,就不能消費(fèi),線(xiàn)程掛起,生產(chǎn)者與消費(fèi)者不能同時(shí)對(duì)緩沖區(qū)操作。需要使用如下信號(hào)量:一個(gè)互斥信號(hào)量,用以阻止生產(chǎn)者線(xiàn)程

2、和消費(fèi)者線(xiàn)程同時(shí)操作緩沖區(qū)列表;一個(gè)信號(hào)量,當(dāng)生產(chǎn)者線(xiàn)程生產(chǎn)出一個(gè)物品時(shí)可以用它向消費(fèi)者線(xiàn)程發(fā)出信號(hào);一個(gè)信號(hào)量,消費(fèi)者線(xiàn)程釋放出一個(gè)空緩沖區(qū)時(shí)可以用它向生產(chǎn)者線(xiàn)程發(fā)出信號(hào);編寫(xiě)一段程序,模擬生產(chǎn)者和消費(fèi)者線(xiàn)程,實(shí)現(xiàn)進(jìn)程的互斥與同步。利用VC+6.0實(shí)現(xiàn)上述程序設(shè)計(jì)和調(diào)試操作,對(duì)于生產(chǎn)者和消費(fèi)者線(xiàn)程操作的成功與提供一定的提示框。通過(guò)閱讀和分析實(shí)驗(yàn)程序,熟悉進(jìn)程的互斥與同步的概念。三、 實(shí)驗(yàn)代碼:#include<windows.h>#include<iostream>using namespace std;const unsigned short N=5;/定義緩沖區(qū)的

3、大小HANDLE m_S_Empty; / 生產(chǎn)者SemaphoreHANDLE m_S_Full; / 消費(fèi)者SemaphoreHANDLE m_M_Mutex;/互斥int bufferN; /定義共享緩沖區(qū)unsigned short ProductID = 0; /產(chǎn)品號(hào)unsigned short ConsumeID = 0; /將被消耗的產(chǎn)品號(hào)unsigned short in = 0; /產(chǎn)品進(jìn)緩沖區(qū)時(shí)的緩沖區(qū)下標(biāo)unsigned short out = 0; /產(chǎn)品出緩沖區(qū)時(shí)的緩沖區(qū)下標(biāo)bool flag = true; /控制程序結(jié)束DWORD WINAPI Producer

4、(LPVOID); /生產(chǎn)者線(xiàn)程DWORD WINAPI Consumer(LPVOID); /消費(fèi)者線(xiàn)程int main() m_S_Empty = CreateSemaphore(NULL, N, N, NULL); /初始計(jì)數(shù)為Nm_S_Full = CreateSemaphore(NULL, 0, N, NULL);/初始計(jì)數(shù)為0m_M_Mutex = CreateMutex(NULL,FALSE,NULL); CreateThread(NULL,0,Producer,NULL,0,NULL);/創(chuàng)建生產(chǎn)者線(xiàn)程CreateThread(NULL,0,Consumer,NULL,0,NU

5、LL);/創(chuàng)建消費(fèi)者線(xiàn)程 while(flag) if(getchar() /按回車(chē)后終止程序運(yùn)行 flag = false; return 0;void Produce()cout<<"產(chǎn)品生產(chǎn)中"<<+ProductID<<" . "cout<<"生產(chǎn)成功"<<endl;void Consume()cout<<"產(chǎn)品消費(fèi)中"<<ConsumeID<<" . "cout<<"消

6、費(fèi)成功"<<endl;void Append()cout<<"放入一個(gè)產(chǎn)品. " bufferin = ProductID; in = (in+1)%N; cout<<"放入成功"<<endl; /輸出緩沖區(qū)當(dāng)前的狀態(tài) for (int i=0;i<N;i+) std:cout<<i<<": "<<bufferi; if(i=in) cout<<" <- 生產(chǎn)" if(i=out) cout<

7、<" <- 消費(fèi)" cout<<endl; void Take()cout<<"取出一個(gè)產(chǎn)品. "ConsumeID = bufferout;out = (out+1)%N;cout<<"取出成功"<<endl; /輸出緩沖區(qū)當(dāng)前的狀態(tài)for (int i=0;i<N;i+) cout<<i<<": "<<bufferi; if(i=in) cout<<" <- 生產(chǎn)" if(

8、i=out) cout<<" <- 消費(fèi)" cout<<endl; DWORD WINAPI Producer(LPVOID)while(flag)if(WaitForSingleObject(m_S_Empty,INFINITE)=WAIT_OBJECT_0)if(WaitForSingleObject(m_M_Mutex,INFINITE)=WAIT_OBJECT_0) Produce();/生產(chǎn)一個(gè)物品 Append();/將所生產(chǎn)的物品放到指定的緩沖區(qū)中 Sleep(1500);ReleaseMutex(m_M_Mutex);ReleaseSemaphore(m_S_Full, 1, NULL); return 0;DWORD WINAPI Consumer(LPVOID) while(flag)if(WaitForSingleObject(m_S_Full,INFINITE)=WAIT_OBJECT_0)if(WaitForSingleObject(m_M_Mutex,INFINITE)=WAIT_OB

溫馨提示

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

評(píng)論

0/150

提交評(píng)論