给出是生产者-消费者问题的以下算法。没有利用 缓冲。同步必须严格连续:如果生产者已经生产,则 消费者必须消费,反之亦然。
Producer:
while (true)
{
while (turn == CONSUMER);
turn = CONSUMER;
// produce
}
Consumer:
while (true)
{
while (turn == PRODUCER);
turn = PRODUCER;
// consume
}
两个进程都共享int变量turn。
PRODUCER和CONSUMER是最终整数,并且也共享,其值分别为0和1。 转弯的初始值为PRODUCER。 评估关于给定算法的以下两个命题的正确性,并给出 简短的解释。 1.该算法严格连续地同步生产者和消费者。 2.此算法可能会发生死锁。
我如何使用场景显示(证明)这两个陈述?
答案 0 :(得分:0)
1-是的。该算法确实严格连续地同步过程。为了使Producer通过循环,必须将变量turn设置为Producer,这只能在Consumer进行一次迭代之后才能进行,这同样适用于Consumer。生产者在不消耗消费者的情况下生产多于一种的情况是不可能的。
2-错误。死锁不会发生,因为回合总是生产者或消费者,因此它们不能无限期地等待对方。