資源簡介
實驗四、生產者消費者問題(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
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????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
?????目錄??????????0??2012-03-23?15:27??LinuxPC
-----------?---------??----------?-----??----
????????????????20264????????????????????6
- 上一篇:信息化系統建設方案編寫參考模板
- 下一篇:Visio工具時序圖教程
評論
共有 條評論