温馨提示,这个题目的代码可能很简单,但是有点绕,类似于前面的橘子苹果问题的交替放入水果。好啦,开始!
有一个盒子中放有数量相等的黑白棋子,现在用自动分拣系统将黑白棋子分开,系统中有两个进程P1和P2。P1负责白棋子的分拣,P2则负责黑棋子的分拣,两者必须交替进行分拣,且分拣结束前不得停止。用PV操作解决该问题。
:这么去理解,把P1和P2看作两个资源,互斥进行访问,与橘子苹果问题正好相反。
semaphore flag1=1;
semaphore flag2=0;
P1()
{
while(1)
{
P(flag1);
分拣一个白棋子;
V(flag2); //发信号给P2
}
}
P2()
{
while(1)
{
P(flag2);
分拣一个黑棋子;
V(flag1); //发信号给P1
}
}
理解之后,看完代码是不是感觉题目超级简单~