优先级倒置的概念是TSL不能无死锁的情况,那么人们怎么能说TSL没有死锁?
答案 0 :(得分:1)
让我们先看看Deadlock的定义。
定义: - 如果一组进程等待由同一组中的其他进程引起的事件发生,则称其处于死锁中。此处集中的进程处于等待/阻止状态。
现在让我们了解优先级倒置。让进程A 是在关键部分运行的优先级较低的进程。和流程B 是更高优先级的流程。
当进程B 进入就绪状态时,它将被调度(进入运行状态)并且进程A被调度程序抢占,因为它优先级低。这里流程A 进入等待/阻止状态,但它已经锁定了关键部分,流程B 处于正在运行然后进入Busy等待的状态,因为临界区已被进程A !!锁定。这导致无限的等待。这种情况基本上称为 SpinLock ,因为流程B 处于运行状态,而流程A 位于等待/阻止状态,但根据死锁的定义,所有进程都应处于等待/阻塞状态。
这就是为什么TSL被认为是死锁的原因,但它不是免费的 SpinLock 。
我希望这会有所帮助:)