假设一个录像厅有0,1,2三种不同的录像片可由观众选择放映。录像厅的放映规则为: 1)任何时刻最多只能放映一种录像片,正在放映的录像片是自动循环放映的。最后一个观众主动离开时结束当前录像片的放映。

录像厅问题

假设一个录像厅有0,1,2三种不同的录像片可由观众选择放映。录像厅的放映规则为:
1)任何时刻最多只能放映一种录像片,正在放映的录像片是自动循环放映的。最后一个观众主动离开时结束当前录像片的放映。
2)选择当前正在放映录像片的观众可立即进入,允许同时有多位选择同一中录像片的观众同时观看,同时观看的观众数量不受限制。
3)等待观看其他录像片的观众按到达顺序排队,当一种新的录像片开始放映时,所有等待观看该录像片的观众可一次进入录像厅同时观看。

问题分析

临界资源:录像厅

  1. 对三种不同的观众来说,使用录像厅是互斥的,用mutex来表示;
  2. 对于每一种不同的观众观影时,我们需要知道该类观众的人数,用count0、count1、count2来表示;
  3. 为了保证计数变量的操作之间是互斥的,用mutex0、mutex1、mutex2分别表示count0、count1、count2的互斥使用

代码

semaphore mutex=1,mutex0=1,mutex1=1,mutex2=1;
int count0=0,count1=0,count2=0;

void zero()
{
	P(mutex0);
	if(count0=0) P(mutex);
	count0++;
	V(mutex0);
	观影; 
	P(mutex0);
	count0--;
	if(count0=0) V(mutex);
	V(mutex0);
 } 
 
void one()
{
	P(mutex1);
	if(count1=0) P(mutex);
	count1++;
	V(mutex1);
	观影; 
	P(mutex1);
	count1--;
	if(count1=0) V(mutex);
	V(mutex1);
}

void two()
{
	P(mutex2);
	if(count2=0) P(mutex);
	count2++;
	V(mutex2);
	观影; 
	P(mutex2);
	count2--;
	if(coun2=0) V(mutex);
	V(mutex2);
}

void main()
{
	cobegin
	zero();one();two();
	coend
}
  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值