每天一练--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);//允许其他人离开;
}
}
前一篇:PV操作
后一篇:每天一练--PV操作

加载中…