这是一个活锁或死锁或饥饿的例子吗?

时间:2017-01-05 14:55:21

标签: multithreading synchronization deadlock livelock starvation

调度方案:抢先优先级调度

情况:

进程L(低优先级)获取资源(R)上的自旋锁。当仍处于临界区时,由于另一个进程H(高优先级)到达就绪队列,L被抢占。

但是,H还需要访问资源R,因此尝试获取自旋锁,导致H忙于等待。因为使用自旋锁,H实际上从不进入等待状态并且总是处于运行状态或就绪状态(如果优先级更高的进程到达就绪队列),则阻止L或任何优先级低于H的进程执行。 / p>

A)优先级低于H的所有流程都可以被认为是在Starvation下

B)优先级低于H的所有进程以及进程H都可以被认为处于死锁状态。 [但是,那么进程必须处于等待状态才能使系统陷入僵局?]

C)优先级低于H的所有进程以及进程H都可以被认为是在一个活锁中。[但是,只有H的状态不断变化,所有低优先级进程都保持在Ready状态州。如果系统处于活锁状态,那么所有进程的状态是否需要连续更改(作为自旋锁定的一部分)?]

D)单独H可以被认为是活锁,所有优先级较低的进程都处于饥饿状态,而不是活锁。

E)H不会进步,但不能被认为是活锁。所有优先级较低的流程都处于饥饿状态,而不是活锁。

以上哪项陈述是正确的?你能解释一下吗?

1 个答案:

答案 0 :(得分:0)

这不是一个活锁,因为活锁的定义需要"states of the processes involved in the livelock constantly change with regard to one another",这里的状态实际上不会改变。

可以认为第一个进程处于处理器饥饿状态,因为如果有额外的处理器,它可以在其上运行并最终释放锁定并让第二个处理器运行。

这种情况也可以被视为死锁,资源图中有2个资源,2个进程试图以相反的方向获取资源:第一个进程拥有锁并需要处理器继续,而第二个进程拥有处理器并需要锁定才能继续。