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

Multithreading 这是一个活锁、死锁或饥饿的例子吗?,multithreading,synchronization,deadlock,livelock,starvation,Multithreading,Synchronization,Deadlock,Livelock,Starvation,调度方案:抢占式优先级调度 情况: 进程L(低优先级)获取资源(R)上的自旋锁。当仍然处于临界区时,L被抢占,因为另一个进程-H(更高优先级)进入就绪队列 然而,H还需要访问资源R,因此尝试获取自旋锁,这导致H进入忙等待。由于使用了自旋锁,H实际上从不进入等待状态,而是始终处于运行状态或就绪状态(在更高优先级的进程到达就绪队列的情况下),从而阻止L或任何优先级低于H的进程执行 A) 优先级小于H的所有进程都可以被视为处于饥饿状态 B) 优先级低于H的所有进程以及进程H都可以被视为处于死锁状态。[

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

情况:

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

然而,H还需要访问资源R,因此尝试获取自旋锁,这导致H进入忙等待。由于使用了自旋锁,H实际上从不进入等待状态,而是始终处于运行状态或就绪状态(在更高优先级的进程到达就绪队列的情况下),从而阻止L或任何优先级低于H的进程执行

A) 优先级小于H的所有进程都可以被视为处于饥饿状态

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

C) 所有优先级低于H的进程以及进程H都可以被视为处于活动锁中。[但是,只有H的状态不断变化,所有低优先级进程都保持在就绪状态。如果系统处于活动锁中,难道所有进程的状态不需要不断变化(作为旋转锁的一部分吗?]

D) 只有H可以被认为是在livelock中,所有低优先级进程都处于饥饿状态,而不是在livelock中

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


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

这不是一个活锁,因为活锁的定义要求这样,而这里的状态实际上不会改变

第一个进程可以被认为是处理器不足,因为如果有额外的处理器,它可以在上面运行,并最终释放锁,让第二个处理器运行

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