Sun*_*thi 1 synchronization operating-system
优先级反转的概念是TSL不能无死锁的一种情况,那么怎么能说TSL是无死锁的呢?
我们先来看看死锁的定义。
定义:如果一组进程等待同一组中其他进程引起的事件发生,则称它们处于死锁状态。这里集合中的进程处于等待/阻塞状态。
现在让我们了解一下优先级反转。假设进程 A是一个运行在临界区的较低优先级进程。进程B是优先级较高的进程。
当进程 B进入就绪状态时,它会被调度(进入运行状态),而进程 A 会被调度程序抢占,因为它的优先级较低。这里进程A进入等待/阻塞状态,但它已经锁定了临界区,而进程B处于运行状态,然后进入忙等待,因为临界区已经被进程A锁定了!这会导致无限的等待。这种情况基本上称为SpinLock,因为进程 B处于运行状态,进程 A处于等待/阻塞状态,但根据死锁的定义,所有进程都应处于等待/阻塞状态。
这就是为什么 TSL 被认为是无死锁的,但它并没有摆脱SpinLock 的影响。
我希望这会有所帮助:)