实验四、生产者消费者问题(15分)
• 一个大小为3的缓冲区,初始为空
• 2个生产者
– 随机等待一段时间,往缓冲区添加数据,
– 若缓冲区已满,等待消费者取走数据后再添加
– 重复6次
• 3个消费者
– 随机等待一段时间,从缓冲区读取数据
– 若缓冲区为空,等待生产者添加数据后再读取
– 重复4次
说明:
• 显示每次添加和读取数据的时间及缓冲区的状态
• 生产者和消费者用进程模拟,缓冲区用共享内存来实现
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 428032 2009-04-02 08:45 实验四20062918-柳丝-实验四.doc
文件 970 2009-03-31 22:47 实验四LinuxPCconsumer.c
文件 1121 2008-05-28 21:53 实验四LinuxPChead.h
文件 790 2009-03-31 21:35 实验四LinuxPCpc.c
文件 999 2009-03-31 22:49 实验四LinuxPCproducer.c
..A.SH. 16384 2009-04-02 08:29 实验四LinuxPCThumbs.db
文件 148480 2009-04-01 16:01 实验四WindowsPCDebugvc60.idb
文件 77824 2009-04-01 15:58 实验四WindowsPCDebugvc60.pdb
文件 184369 2009-03-31 21:06 实验四WindowsPCDebugWindowsPC.exe
文件 195504 2009-03-31 21:06 实验四WindowsPCDebugWindowsPC.ilk
文件 18568 2009-04-01 16:01 实验四WindowsPCDebugWindowsPC.obj
文件 3559256 2009-04-01 15:58 实验四WindowsPCDebugWindowsPC.pch
文件 467968 2009-03-31 21:06 实验四WindowsPCDebugWindowsPC.pdb
文件 5744 2009-03-31 21:06 实验四WindowsPCWindowsPC.cpp
文件 4320 2009-03-31 21:37 实验四WindowsPCWindowsPC.dsp
文件 541 2009-03-31 21:37 实验四WindowsPCWindowsPC.dsw
文件 50176 2009-04-02 08:46 实验四WindowsPCWindowsPC.ncb
文件 48640 2009-04-02 08:46 实验四WindowsPCWindowsPC.opt
文件 737 2009-04-01 16:01 实验四WindowsPCWindowsPC.plg
目录 0 2009-04-01 15:58 实验四WindowsPCDebug
目录 0 2009-04-02 08:44 实验四LinuxPC
目录 0 2009-04-02 08:46 实验四WindowsPC
目录 0 2009-04-14 17:10 实验四
----------- --------- ---------- ----- ----
5210423 23
/*消费者*/
#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.
“
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(“
“);
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 实验四LinuxPCconsumer.c
文件 1121 2008-05-28 21:53 实验四LinuxPChead.h
文件 790 2009-03-31 21:35 实验四LinuxPCpc.c
文件 999 2009-03-31 22:49 实验四LinuxPCproducer.c
..A.SH. 16384 2009-04-02 08:29 实验四LinuxPCThumbs.db
文件 148480 2009-04-01 16:01 实验四WindowsPCDebugvc60.idb
文件 77824 2009-04-01 15:58 实验四WindowsPCDebugvc60.pdb
文件 184369 2009-03-31 21:06 实验四WindowsPCDebugWindowsPC.exe
文件 195504 2009-03-31 21:06 实验四WindowsPCDebugWindowsPC.ilk
文件 18568 2009-04-01 16:01 实验四WindowsPCDebugWindowsPC.obj
文件 3559256 2009-04-01 15:58 实验四WindowsPCDebugWindowsPC.pch
文件 467968 2009-03-31 21:06 实验四WindowsPCDebugWindowsPC.pdb
文件 5744 2009-03-31 21:06 实验四WindowsPCWindowsPC.cpp
文件 4320 2009-03-31 21:37 实验四WindowsPCWindowsPC.dsp
文件 541 2009-03-31 21:37 实验四WindowsPCWindowsPC.dsw
文件 50176 2009-04-02 08:46 实验四WindowsPCWindowsPC.ncb
文件 48640 2009-04-02 08:46 实验四WindowsPCWindowsPC.opt
文件 737 2009-04-01 16:01 实验四WindowsPCWindowsPC.plg
目录 0 2009-04-01 15:58 实验四WindowsPCDebug
目录 0 2009-04-02 08:44 实验四LinuxPC
目录 0 2009-04-02 08:46 实验四WindowsPC
目录 0 2009-04-14 17:10 实验四
----------- --------- ---------- ----- ----
5210423 23
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)