互斥,进步,有限等待-如何使用场景进行证明

时间:2019-04-14 09:58:30

标签: operating-system synchronization critical-section

给出是生产者-消费者问题的以下算法。没有利用 缓冲。同步必须严格连续:如果生产者已经生产,则 消费者必须消费,反之亦然。

 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.此算法可能会发生死锁。

我如何使用场景显示(证明)这两个陈述?

1 个答案:

答案 0 :(得分:0)

1-是的。该算法确实严格连续地同步过程。为了使Producer通过循环,必须将变量turn设置为Producer,这只能在Consumer进行一次迭代之后才能进行,这同样适用于Consumer。生产者在不消耗消费者的情况下生产多于一种的情况是不可能的。

2-错误。死锁不会发生,因为回合总是生产者或消费者,因此它们不能无限期地等待对方。