题目
解答
这题我个人认为是输入设备依次输入a、b、c并且P1,P2,P3三个程序需要依次进行接收对应的数据进行运算。王道的课后答案设置了6个信号量,稍微有点多。
我的想法是只需要保证P1是每轮第一个运行的程序,Pi+1必须在Pi之后即可。
semaphore P2_Run = 0;
semaphore P3_Run = 0;
semaphore Final = 0;
void P1()
{
//接收输入数据
V(P2_Run);
P(Final);//等待P2,P3接收结束
//计算并打印结果
}
void P2()
{
P(P2_Run);//等待P1结束
//接收输入数据
V(P3_Run);
}
void P3()
{
P(P3_Run);//等待P2结束
//接收输入数据
V(Final);
}
如果整个程序仅有这三个进程可以用这个方法,用多个Pi,则需要重新考虑。
2023/08/11