系统中有多个生产者进程和多个消费者进程,共享一个能存放1000件产品的环形缓冲区(初始为空)。当缓冲区未满时,生产者进程可以放入其生产的一件产品,否则等待;当缓冲区未空时,消费者进程可以从缓冲区取走一件产品,否则等待。要求:一个消费者进程从缓冲区连续取出10件产品后,其他消费者进程才可以取产品。请使用信号量P,V(wait(),signal())操作实现进程间的互斥与同步,要求写出完整的过程,并说明所用信号量的含义和初值。

//定义信号量
semaphore full = 0, empty = 1000, mutex = 1, consumermutex = 1;
int in = 0, out = 0;
//定义两个用来计数的变量,信号量不能用来做加减运算操作
item buffer[1000];
//定义缓冲区的大小
void consumer(){while(true){ //消费者之间互斥,所以用consumermutex来保护起来wait(consumermutex);  //进行取10个产品操作for(int i=0; i<10; i++){wait(full);wait(mutex);//取产品和放产品互斥,用mutexnextc = buffer[out];out = (out+1)%1000;//注意这里的模运算signal(mutex);signal(empty);      }signal(consumsermutex);}
}void producer(){while(true){wait(empty);wait(mutex);生产一个产品;buffer[in] = nextp;//把产品放入缓冲区in = (in+1)%1000;signal(mutex);signal(full);}
}
void main(){cobeginconsumer();producer();coend
}

系统中有多个生产者进程和多个消费者进程,共享一个能存放1000件产品的环形缓冲区(初始为空)。当缓冲区未满时,生产者进程可以放入其生产的一件产品,否则等待;相关推荐

  1. target存放的是编译后的.class文件地方 默认情况下不会讲非class文件放入进入 如果要使用非.class文件 需要通过增加配置方式自动加入文件...

    target存放的是编译后的.class文件地方 默认情况下不会讲非class文件放入进入 如果要使用非.class文件 需要通过增加配置方式自动加入文件 转载于:https://www.cnblog ...

  2. 设一个学生的信息包括学号、姓名、出生日期和性别等。把n个学生的信息放入一个集合中,可以根据学号对学生信息进行检索,并且可以根据出生日期对学生进行排序输出。

    设一个学生的信息包括学号.姓名.出生日期和性别等.把n个学生的信息放入一个集合中,可以根据学号对学生信息进行检索,并且可以根据出生日期对学生进行排序输出. 要求 对于每个学生的个人信息,可以定义一个类 ...

  3. 进程P1、P2、P3共享一个表格F,P1对F只读不写,P2对F只写不读,P3对F先读后写。进程可同时读F,但有进程写时,其他进程不能读和写。

    进程P1.P2.P3共享一个表格F,P1对F只读不写,P2对F只写不读,P3对F先读后写.进程可同时读F,但有进程写时,其他进程不能读和写.要求:(1)正常运行时不能产生死锁.(2)F的并发度要高. ...

  4. adb shell 小米手机_【转】【Android测试技巧】01. root后adb shell默认不是root用户时,如何将文件放入手机系统中...

    http://blog.csdn.net/wirelessqa/article/details/8624208 有些机器root后通过adb shell 后,默认不是root用户,需要输入 su才能切 ...

  5. 【Android测试技巧】01. root后adb shell默认不是root用户时,如何将文件放入手机系统中

    有些机器root后通过adb shell 后,默认不是root用户,需要输入 su才能切换到root,这样在执行批处理或想将文件放到手机系统中会有问题: 方法一:命令行 1 adb shell &qu ...

  6. CaseStudy(showcase)界面篇-导出xaml以及放入Blend的技巧

    做silvelight也有一段时间了,相册.游戏,刚刚完成的showcase这个小程序算是一个阶段了.这里就以showcase这个项目来做一下CaseStudy. 界面篇-导出xaml以及放入Blen ...

  7. linux 光驱如何自动运行,怎样才能让光盘放入光驱后自动运行某个程序?

    经常使用光盘的朋友都知道,有很多光盘放入光驱就会自动运行,它们是怎么做的呢?光盘一放入光驱就会自动被执行,主要依靠两个文件,一是光盘上的AUTORUN.INF文件,另一个是操作系统本身的系统文件之一的 ...

  8. Linux进程通信的四种方式——共享内存、信号量、无名管道、消息队列|实验、代码、分析、总结

    Linux进程通信的四种方式--共享内存.信号量.无名管道.消息队列|实验.代码.分析.总结 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须 ...

  9. 【Qt】QStackedWidget:将多个窗口控件放入堆中,每次只显示一个窗口控件

    1.简介 QStackedWidget可以容纳多个窗口控件,每次只显示其中一个.例如:登录页面.各种功能页面等不同时显示的窗口,可以放入QStackedWidget中. 2.demo // 创建三个页 ...

最新文章

  1. mysql自连接查询去重_MySQL命令汇总
  2. k8s里面的项目怎么暴露端口让用户访问_从零开始入门 K8s | 可观测性:监控与日志...
  3. sharepoint 2007功能增强解决方案,资料收集
  4. 一文掌握关于Java数据结构所有知识点(欢迎一起完善) 1
  5. Android RecyclerView实现长按弹出PopupMenu菜单
  6. 智能门锁的千亿市场,为何迟迟不来?
  7. 如何使用微软官方工具MediaCreationTool来制作Windows10启动盘
  8. ChinaITLab-Linux工程师培训课程笔记1
  9. java一天一只顽猴想去从山脚_异乡苦境救顽猴
  10. vue3中的vue-router简单实现以及router变迁带来的思考
  11. 实验四 201421440038 徐凤娇
  12. crmeb v4.4.2 修复前端小程序物流查询有部分查询不出来的问题
  13. 我是如何通过系统架构设计师考试的(2017年软考)
  14. 第一章软件危机与软件工程
  15. 特斯拉扔出了一片“二向箔”
  16. 江南大学计算机考研招生人数,江南大学考研人数+调剂人数+录取人数+被刷人数+保研人数...
  17. 【吐血整理】想学Google Guava看这篇就够了
  18. 费米估算类问题-解决方法
  19. GPIO小综合-按键实验
  20. 阿达帕拉肽AVSEHQLLHDKGKSIQDLRRRELLEKLL-Aib-KLHTA-NH2

热门文章

  1. 计算机软件系统崩溃,系统崩溃了怎么办 如何快速还原崩溃的系统【步骤方法】...
  2. Mongdb重启后dirty很高,cache打满
  3. 【经典面试题】JS实现七种排序(冒泡、快排、归并、选择、插入、希尔、堆)
  4. hive中的分区表与视图
  5. 垃圾渗滤液处理工艺,你至少要知道这些!
  6. Python -- 反编译pyc文件
  7. pcl::PolygonMesh简析
  8. “新DeFi”生态的构建,流支付协议Zebec或厚积薄发
  9. 【Git】GitHub flow笔记 | GitHub flow和Git flow的区别
  10. 国内人脸识别公司哪家强,人脸比对跑个分比较下!