-
大小: 523KB文件類型: .zip金幣: 2下載: 0 次發(fā)布日期: 2021-05-23
- 語言: C/C++
- 標(biāo)簽:
資源簡介
北郵操作系統(tǒng)第三次實驗作業(yè),進程同步。。C語言編寫。。。windows環(huán)境下運行。。歡迎大家下載。。。↖(^ω^)↗。。附帶實驗報告哦。。親

代碼片段和文件信息
#include
#include
#include
#include
using?namespace?std;
typedef?HANDLE?Semaphore;??//信號量的定義
typedef?int?size;?????????????????????????//數(shù)據(jù)大小定義
typedef?int??Boundary;???????????//緩沖區(qū)邊界定義
typedef?int?Buffer_Kind;?????//定義緩沖區(qū)數(shù)據(jù)類型
typedef?int?kind_of_request;?//請求類型
typedef?int?Time;???????????//定義時間類型
typedef?int?Process_Kind;
typedef?int?Sequence_number;
/*最大緩沖區(qū)*/
const?size?MAX_BUFFER?=?256;???
const?size?MAX_REQUEST=20;
typedef?struct?node
{
Process_Kind?con_or_prod;??//請求者的類型
Time????????????????consume_time;?//占用時間
}Pro;
??????????????????? /*緩沖區(qū)的邊界設(shè)置??實現(xiàn)一個循環(huán)隊列*/
Boundary?on;?????//上邊界
Boundary?off;??//下邊界?
/*定義緩沖區(qū)數(shù)組(隊列)*/
Buffer_Kind?buffer[MAX_BUFFER]?;
/*定義請求隊列(包含請求的進程類型,進程所占用的時間)*/
Pro?request[MAX_REQUEST];
/*定義三個信號量
mutex(對倉庫訪問的控制)empty(消費者消費的控制量)full(生產(chǎn)者生產(chǎn)的控制量)
*/
Semaphore?mutex?;
Semaphore?full?;
Semaphore?empty;
HANDLE?total_thread[MAX_REQUEST];??//總線程
/*定義生產(chǎn)者和消費者的隊列*/
DWORD?product_id[MAX_REQUEST]?;?//生產(chǎn)者隊列
DWORD?consume_id[MAX_REQUEST];??//消費者隊列
Sequence_number?product_number;??//生產(chǎn)者的標(biāo)號
Process_Kind?PRODUCT?;???//生產(chǎn)者
Process_Kind?CONSUME;?//消費者
/*用戶輸入*/
size?BUFFER_SIZE;???//倉庫大小
size?REQUEST_NUM;//請求的個數(shù)
?/*主控制程序*/
?int?Process_Control();
?void?Initialization();
?/*系統(tǒng)調(diào)用的接口(生產(chǎn)者的系統(tǒng)調(diào)用)*/
?DWORD?WINAPI?producer(LPVOID?lpPara);
?/*系統(tǒng)調(diào)用的接口(消費者的系統(tǒng)調(diào)用)*/
?DWORD?WINAPI?consumer(LPVOID?lpPara);
void?Initialization()
{
????product_number=1;
on=off=0;
memset(buffer?0?sizeof(buffer))?;
?????
cout<<“ \t \t 這是一個簡單的進程(線程模擬實驗)????\t\t“< cout<<“請輸入倉庫的大小:??“< cin>>BUFFER_SIZE;
cout<<“請輸入總的線程數(shù):“< cin>>REQUEST_NUM;
char?ch;
Time?temptime;//臨時的一個保存時間的變量
for(int?i=0;?i {
cout<<“請輸入第“< cin>>ch>>temptime;
request[i].consume_time=temptime;
request[i].con_or_prod=ch;
}
}
DWORD?WINAPI?producer(LPVOID?lpPara)
{
??WaitForSingleobject(full?INFINITE);?//等待空位
??WaitForSingleobject(mutex?INFINITE);?????//對倉庫的操作權(quán)
??/*跳過生產(chǎn)過程
??pa?pa?pa?pa
??*/
?????????????????????????cout<<“生產(chǎn)者“<<(int)lpPara<<“正在生產(chǎn)產(chǎn)品放在“< ?????????????????????????buffer[on]=++product_number;
?????????????????????????on=(on+1)%BUFFER_SIZE;
?????????????????????????Sleep(5);
?cout<<“生產(chǎn)者“<<(int)lpPara<<“生產(chǎn)成功!!“<
????ReleaseMutex(mutex);??????????????????????????//釋放倉庫操作權(quán)
ReleaseSemaphore(empty?1?NULL);????//非空位加一
return?0;
}
DWORD?WINAPI??consumer(LPVOID?lpPara)
{
WaitForSingleobject(empty?INFINITE);//等待非空位
????WaitForSingleobject(mutex?INFINITE);?????//對倉庫的操作權(quán)
//開始從倉庫取出產(chǎn)品
????cout<<“消費者“<<(int)lpPara<<“正在進行消費第“<
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2012-11-16?00:05??06-龍佳-10211295\
?????文件???????33792??2012-11-16?00:04??06-龍佳-10211295\實驗2??進程管理.doc
?????文件?????????852??2012-11-16?00:01??06-龍佳-10211295\程序1.cpp
?????文件????????1029??2012-11-16?00:02??06-龍佳-10211295\程序2.cpp
?????文件????????1086??2012-11-16?00:03??06-龍佳-10211295\程序3.cpp
?????文件????????1367??2012-11-16?00:03??06-龍佳-10211295\程序4.cpp
?????文件????????1031??2012-11-16?00:04??06-龍佳-10211295\程序5.cpp
?????文件??????230120??2012-11-25?21:04??實驗三-進程同步.docx
?????文件????????5335??2012-11-25?19:30??生產(chǎn)者消費者問題.cpp
?????文件?????1297539??2012-11-25?21:01??生產(chǎn)者消費者問題.exe
評論
共有 條評論