首页 > 试题广场 >

中日兵乓球联赛男子双打比赛,中方C1,C2两位选手和日方J1

[单选题]
中日兵乓球联赛男子双打比赛,中方C1,C2两位选手和日方J1,J2两位选手对阵。首轮由中方发球,直至接球失误后由队方换发球。试用PV操作原语分析这一过程,以下合理的说法是(     )
  • 应设置至少4个信号量,分别代表4类消息的传递。4个信号量的初始值均为0。
  • 应设置至少2个信号量,分别代表2组队员对资源的使用权。2个信号量的初始值均为0。
  • 应设置至少4个信号量,分别代表4类消息的传递。4个信号量的初始值只有一个为1,其余均设置为0。
  • 应设置至少4个信号量,分别代表4类消息的传递。4个信号量的初始值只有一个为0,其余均设置为1。
首先分析互斥还是同步(有相互联系的,即你发生我才发生),发现乒乓球是一个互斥量,所以初值为1,然后发现当中方或者日方有任意一方接球失误后,都换为对方发球,属于同步关系,其中有三个量,中方失误,日方失误,轮换发球(即同步关系)由于刚开始失误次数肯定都是0,又因为轮换发球属于同步关系初值为0,所以除了一个互斥量为1外,其余各部分初值为0
编辑于 2019-12-04 15:27:12 回复(1)
参考答案和其它解析写的。。不确定理解是否正确。
//我理解的四种消息:c打球成功,c打球失败;j打球成功,j打球失败
sem_t t1,t2,t3,t4;
sem_init(&t1,0);
sem_init(&t2,0);
sem_init(&tc,1);//初始化时c打球
sem_init(&tj,0);
int score_c=0;
int score_j=0;
control(){//c打球失败时,j计分
	sem_wait(&t1);
	score_j++;
	sem_post(&tj);
}
control2(){
	sem_wait(&t2);
	score_c++;
	sem_post(&tc);
}
fc(){
	sem_wait(&tc);
	if(发球失败){
		sem_post(&t1);
	}
	else{
		sem_post(&tj);
	}
}
fj(){
	sem_wait(&tj);
	if(发球失败){
		sem_post(&t2);
	}
	else{
		sem_post(&tc);
	}
}

发表于 2020-04-22 12:36:46 回复(1)