資源簡介
壓縮包中包括linux和windows的程序源代碼及實驗報告
消費(fèi)者和生產(chǎn)者問題如下:
? 一個大小為3的緩沖區(qū),初始為空
? 2個生產(chǎn)者
– 隨機(jī)等待一段時間,往緩沖區(qū)添加數(shù)據(jù),
– 若緩沖區(qū)已滿,等待消費(fèi)者取走數(shù)據(jù)后再添加
– 重復(fù)6次
? 3個消費(fèi)者
– 隨機(jī)等待一段時間,從緩沖區(qū)讀取數(shù)據(jù)
– 若緩沖區(qū)為空,等待生產(chǎn)者添加數(shù)據(jù)后再讀取
– 重復(fù)4次
說明:
? 顯示每次添加和讀取數(shù)據(jù)的時間及緩沖區(qū)的狀態(tài)
? 生產(chǎn)者和消費(fèi)者用進(jìn)程模擬,緩沖區(qū)用共享內(nèi)存來實現(xiàn)

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#define?SEM_EMPTY?0
#define?SEM_FULL?1
#define?SEM_MUTEX?2
#define?KEY?3
#define?SEM_KEY?4
void?P(int?semid?int?sem_num);
void?V(int?semid?int?sem_num);
int?main(int?argcchar?*?argv[])
{
????int?i;
????int?shmidsemid;
????int?*pBuf?=?NULL*output;
????//打開共享內(nèi)存
????shmid?=?shmget(KEY?sizeof(int)*4?0);
????pBuf?=?(int*)shmat(shmid?0?0);
????output?=?pBuf;
????if(pBuf==NULL)
????????printf(“共享內(nèi)存附加失敗!\n“);
????//創(chuàng)建信號量
????semid?=?semget(SEM_KEY3?IPC_CREAT|0660);
????for(i=0;?i<4;?i++)
????{
????????P(semidSEM_FULL);?????//相當(dāng)于P(SEM_FULL)申請讀取緩沖區(qū)的數(shù)據(jù)
????????P(semidSEM_MUTEX);????//相當(dāng)于P(SEM_MUTEX)申請訪問緩沖區(qū)
????????//在緩沖區(qū)中讀取數(shù)據(jù)將1置為0
????????output?=?pBuf;
while((*output)==0)
{
output++;
}
(*output)=0;
//獲取當(dāng)前系統(tǒng)時間
????????struct?timeval?curtime;
gettimeofday(&curtimeNULL);
????????printf(“消費(fèi)者%s在緩沖區(qū)中讀取數(shù)據(jù),讀取時間為:%ld:%ld\n“
argv[0]curtime.tv_seccurtime.tv_usec);
printf(“此時,緩沖區(qū)的狀態(tài)為:\n“);
printf(“[?%d?][?%d?][?%d?]\n“*(pBuf)*(pBuf+1)*(pBuf+2));
V(semidSEM_MUTEX);?????//相當(dāng)于V(SEM_MUTEX)釋放信號量SEM_MUTEX
V(semidSEM_EMPTY);?????//相當(dāng)于V(SEM_EMPTY)釋放信號量SEM_EMPTY
//隨機(jī)等待一段時間
int?time?=?random()%5;
sleep(time);
????}
????return?0;
}
//P操作
void?P(int?semid?int?sem_num)
{
????struct?sembuf?sops;
????sops.sem_num=sem_num;
????sops.sem_op=-1;
sops.sem_flg=0;
????semop(semid?&sops?1);
}
//V操作
void?V(int?semid?int?sem_num)
{
????struct?sembuf?sops;
????sops.sem_num=sem_num;
????sops.sem_op=1;
sops.sem_flg=0;
????semop(semid?&sops?1);
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1810??2011-04-07?19:21??消費(fèi)者生產(chǎn)者\(yùn)Linux\consumer.c
?????文件???????1192??2011-04-07?19:35??消費(fèi)者生產(chǎn)者\(yùn)Linux\main.c
?????文件???????1778??2011-04-07?19:19??消費(fèi)者生產(chǎn)者\(yùn)Linux\producer.c
?????文件???????7764??2011-04-11?08:39??消費(fèi)者生產(chǎn)者\(yùn)Windows\ConsumerAndProducer.cpp
?????文件??????32768??2011-04-07?19:56??消費(fèi)者生產(chǎn)者\(yùn)Windows\ConsumerAndProducer.exe
?????文件?????799232??2011-04-14?19:06??消費(fèi)者生產(chǎn)者\(yùn)實驗報告.doc
?????目錄??????????0??2011-04-14?19:06??消費(fèi)者生產(chǎn)者\(yùn)Linux
?????目錄??????????0??2011-04-14?19:06??消費(fèi)者生產(chǎn)者\(yùn)Windows
?????目錄??????????0??2011-04-14?19:07??消費(fèi)者生產(chǎn)者
-----------?---------??----------?-----??----
???????????????844544????????????????????9
評論
共有 條評論