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

代碼片段和文件信息
#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;
????//打開共享內存
????shmid?=?shmget(KEY?sizeof(int)*4?0);
????pBuf?=?(int*)shmat(shmid?0?0);
????output?=?pBuf;
????if(pBuf==NULL)
????????printf(“共享內存附加失敗!\n“);
????//創建信號量
????semid?=?semget(SEM_KEY3?IPC_CREAT|0660);
????for(i=0;?i<4;?i++)
????{
????????P(semidSEM_FULL);?????//相當于P(SEM_FULL)申請讀取緩沖區的數據
????????P(semidSEM_MUTEX);????//相當于P(SEM_MUTEX)申請訪問緩沖區
????????//在緩沖區中讀取數據將1置為0
????????output?=?pBuf;
while((*output)==0)
{
output++;
}
(*output)=0;
//獲取當前系統時間
????????struct?timeval?curtime;
gettimeofday(&curtimeNULL);
????????printf(“消費者%s在緩沖區中讀取數據,讀取時間為:%ld:%ld\n“
argv[0]curtime.tv_seccurtime.tv_usec);
printf(“此時,緩沖區的狀態為:\n“);
printf(“[?%d?][?%d?][?%d?]\n“*(pBuf)*(pBuf+1)*(pBuf+2));
V(semidSEM_MUTEX);?????//相當于V(SEM_MUTEX)釋放信號量SEM_MUTEX
V(semidSEM_EMPTY);?????//相當于V(SEM_EMPTY)釋放信號量SEM_EMPTY
//隨機等待一段時間
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??消費者生產者\Linux\consumer.c
?????文件???????1192??2011-04-07?19:35??消費者生產者\Linux\main.c
?????文件???????1778??2011-04-07?19:19??消費者生產者\Linux\producer.c
?????文件???????7764??2011-04-11?08:39??消費者生產者\Windows\ConsumerAndProducer.cpp
?????文件??????32768??2011-04-07?19:56??消費者生產者\Windows\ConsumerAndProducer.exe
?????文件?????799232??2011-04-14?19:06??消費者生產者\實驗報告.doc
?????目錄??????????0??2011-04-14?19:06??消費者生產者\Linux
?????目錄??????????0??2011-04-14?19:06??消費者生產者\Windows
?????目錄??????????0??2011-04-14?19:07??消費者生產者
-----------?---------??----------?-----??----
???????????????844544????????????????????9
- 上一篇:PS制作證件照動作集
- 下一篇:調研報告《網絡安全》
評論
共有 條評論