加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

每天一练--PV操作6

(2018-10-16 22:29:23)
分类: 每天一练
假设一个录像厅有1、2、3三种不同的录像片可由观众选择放映,录像厅的放映规则为:任一时刻最多只能放映一种录像片,正在放映的录像片是自动循环放映的,最后一个观众主动离开时结束当前录像片的放映;选择当前正在放映的录像片的观众可立即进入,允许同时有多位选择同一种录像片的观众同时观看,同时观看的观众数量不受限制;等待观看其他录像片的观众按到达顺序排队,当一种新的录像片开始放映时,所有等待观看该录像片的观众可依次序进入录像厅同时观看。用一个进程代表一个观众,要求:用信号量方法PV操作实现,并给出信号量定义和初始值。
分析:进程有三个分别是看三种电影的人 由于操作一样,统一用pi表示i=1、2、3;其他带有i的同理;
需要一个变量来控制人数,人数大于等于1则看电影,=0则结束,而且需要一个互斥操作互斥三个电影的播放,另一个互斥互斥对于人数的判断。
semaphore pi=1;
semaphore mutex=1;
int count=0;
watching moviei(){
while(1){
p(pi);//互斥访问count,表示有人进入;
count++;
if(count==1){
p(mutex);//第一个人进入后开始放
}
v(pi);//释放对于count的互斥让更多人可以进入
看电影;
p(pi);//互斥访问count;
离场;
count--;
if(count==0){
V(mutex);//没人后结束对于电影的播放
}
v(pi);//允许其他人离开;


}
}

0

阅读 收藏 喜欢 打印举报/Report
前一篇:PV操作
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有