第一范文网 - 专业文章范例文档资料分享平台

实验三:生产者与消费者 - 图文

来源:用户分享 时间:2025/7/30 1:40:30 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

. . . .

} Linux下代码:

//主进程 #include #include #include \int main() { int id = semget(SEM_ALL_KEY, 3, IPC_CREAT|0660);//创建信号量集合 //初始化信号量集合 semctl(id, SEM_EMPTY, SETVAL, 3); semctl(id, SEM_FULL, SETVAL, 0); semctl(id, SEM_MUTEX, SETVAL, 1); int shmid = createQueue(); //创建共享主存 if(shmid<0) { perror(\exit(1); } //生成生产者进程 if(fork()==0) execl(\if(fork()==0) execl(\ . . . .

. . . .

//生成消费者进程 if(fork()==0) execl(\if(fork()==0) execl(\if(fork()==0) execl(\//等待子进程 int stat,i; for(i=0;i<5;i++) wait(&stat); removeQueue(shmid);//释放共享主存return 0; } /*生产者*/ #include \main(int argc,char * argv[]) { struct queue *buf,*out; int sem_id = semget(SEM_ALL_KEY,3, IPC_CREAT|0660); int i,j; buf = getQueue();//打开共享主存 out = buf; for(i=0;i<6;i++) { p(sem_id, SEM_EMPTY); //P(EMPTY),EMPTY开始值为3,表明有三个空余,申请一个 . . . .

. . . .

之后,有两个空余,当为零时,不再往里面写数据 p(sem_id, SEM_MUTEX); //P(MUTEX),MUTEX开始值为1,表明一次只能运行一个进程 buf->buf++; //产品数+1 //放入产品后缓冲区置1 (buf + buf->buf) ->buf = 1; //获取当前时间 struct timeval curtime; gettimeofday(&curtime,NULL); //输出信息 printf(\,argv[0],curtime.tv_sec,curtime.tv_usec); printf(\for(j=1;j<=3;j++) printf(\printf(\v(sem_id, SEM_MUTEX); //V(MUTEX) v(sem_id, SEM_FULL); //V(FULL),释放一个FULL,即往里面写了一个数据 //随机 sleep 一会 int ran=random()%5; sleep(ran); } } /*消费者*/ #include \main(int argc,char * argv[]) { . . . .

. . . .

struct queue *buf,*out; int sem_id = semget(SEM_ALL_KEY, 3, IPC_CREAT|0660); int i,j; 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; buf->buf--; //产品数-1 //获取当前时间 struct timeval curtime; gettimeofday(&curtime,NULL); //输出信息 printf(\,argv[0],curtime.tv_sec,curtime.tv_usec); printf(\for(j=1;j<=3;j++) printf(\printf(\v(sem_id, SEM_MUTEX); //V(MUTEX) v(sem_id, SEM_EMPTY); //V(EMPTY) //取出产品后缓冲区置0 . . . .

. . . .

//随机等待一段时间 int ran=random()%5; sleep(ran); } }

Windows运行截图:

Linux下截图:

. . . .

. . . .

. . . .

搜索更多关于: 实验三:生产者与消费者 - 图文 的文档
实验三:生产者与消费者 - 图文.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c9vyp62qd544m0xd0pw4b4c2db011w500m5w_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top