資源簡介
實驗四、生產者消費者問題(15分)
? 一個大小為3的緩沖區,初始為空
? 2個生產者
– 隨機等待一段時間,往緩沖區添加數據,
– 若緩沖區已滿,等待消費者取走數據后再添加
– 重復6次
? 3個消費者
– 隨機等待一段時間,從緩沖區讀取數據
– 若緩沖區為空,等待生產者添加數據后再讀取
– 重復4次
說明:
? 顯示每次添加和讀取數據的時間及緩沖區的狀態
? 生產者和消費者用進程模擬,緩沖區用共享內存來實現

代碼片段和文件信息
/*消費者*/
#include?“head.h“
main(int?argcchar?*?argv[])
{
struct?queue?*buf*out;
int?sem_id?=?semget(SEM_ALL_KEY?3?IPC_CREAT|0660);
int?ij;
buf?=?getQueue();//打開共享主存
????????out?=?buf;
for(i=0;i<4;i++)
{
p(sem_id?SEM_FULL); //P(FULL)?FULL開始值為0,表明開始的時候沒有數據,無法取得,當producer釋放一個數據時,這里開始有數據
p(sem_id?SEM_MUTEX); //P(MUTEX)
????????????????
????????????????(buf?+?buf->buf)?->buf?=?0; //取出產品后緩沖區置0
?????????????????buf->buf--;???//產品數-1
//獲取當前時間
struct?timeval?curtime;
gettimeofday(&curtimeNULL);
//輸出信息
printf(“?No.%s?consumer?get?product?at?%ld:%ld.\n“????
????????????????????????argv[0]curtime.tv_seccurtime.tv_usec);
printf(“?Now?the?buffer?is?as?follows:?“);
for(j=1;j<=3;j++)
printf(“%4d“(out+j)->buf);
printf(“\n“);
v(sem_id?SEM_MUTEX); //V(MUTEX)
v(sem_id?SEM_EMPTY); //V(EMPTY)
//隨機等待一段時間
int?ran=random()%5;
sleep(ran);
}
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????428032??2009-04-02?08:45??實驗四\20062918-柳絲-實驗四.doc
?????文件????????970??2009-03-31?22:47??實驗四\LinuxPC\consumer.c
?????文件???????1121??2008-05-28?21:53??實驗四\LinuxPC\head.h
?????文件????????790??2009-03-31?21:35??實驗四\LinuxPC\pc.c
?????文件????????999??2009-03-31?22:49??實驗四\LinuxPC\producer.c
????..A.SH.?????16384??2009-04-02?08:29??實驗四\LinuxPC\Thumbs.db
?????文件?????148480??2009-04-01?16:01??實驗四\WindowsPC\Debug\vc60.idb
?????文件??????77824??2009-04-01?15:58??實驗四\WindowsPC\Debug\vc60.pdb
?????文件?????184369??2009-03-31?21:06??實驗四\WindowsPC\Debug\WindowsPC.exe
?????文件?????195504??2009-03-31?21:06??實驗四\WindowsPC\Debug\WindowsPC.ilk
?????文件??????18568??2009-04-01?16:01??實驗四\WindowsPC\Debug\WindowsPC.obj
?????文件????3559256??2009-04-01?15:58??實驗四\WindowsPC\Debug\WindowsPC.pch
?????文件?????467968??2009-03-31?21:06??實驗四\WindowsPC\Debug\WindowsPC.pdb
?????文件???????5744??2009-03-31?21:06??實驗四\WindowsPC\WindowsPC.cpp
?????文件???????4320??2009-03-31?21:37??實驗四\WindowsPC\WindowsPC.dsp
?????文件????????541??2009-03-31?21:37??實驗四\WindowsPC\WindowsPC.dsw
?????文件??????50176??2009-04-02?08:46??實驗四\WindowsPC\WindowsPC.ncb
?????文件??????48640??2009-04-02?08:46??實驗四\WindowsPC\WindowsPC.opt
?????文件????????737??2009-04-01?16:01??實驗四\WindowsPC\WindowsPC.plg
?????目錄??????????0??2009-04-01?15:58??實驗四\WindowsPC\Debug
?????目錄??????????0??2009-04-02?08:44??實驗四\LinuxPC
?????目錄??????????0??2009-04-02?08:46??實驗四\WindowsPC
?????目錄??????????0??2009-04-14?17:10??實驗四
-----------?---------??----------?-----??----
??????????????5210423????????????????????23
評論
共有 條評論