测试和设置锁定(TSL)不会出现死锁吗?

Sun*_*thi 1 synchronization operating-system

优先级反转的概念是TSL不能无死锁的一种情况,那么怎么能说TSL是无死锁的呢?

Sha*_*yas 6

我们先来看看死锁的定义。

定义:如果一组进程等待同一组中其他进程引起的事件发生,则称它们处于死锁状态。这里集合中的进程处于等待/阻塞状态。

现在让我们了解一下优先级反转。假设进程 A是一个运行在临界区的较低优先级进程。进程B是优先级较高的进程。

进程 B进入就绪状态时,它会被调度(进入运行状态),而进程 A 会被调度程序抢占,因为它的优先级较低。这里进程A进入等待/阻塞状态,但它已经锁定了临界区,而进程B处于运行状态,然后进入忙等待,因为临界区已经被进程A锁定了!这会导致无限的等待。这种情况基本上称为SpinLock,因为进程 B处于运行状态,进程 A处于等待/阻塞状态,但根据死锁的定义,所有进程都应处于等待/阻塞状态。

这就是为什么 TSL 被认为是无死锁的,但它并没有摆脱SpinLock 的影响。

我希望这会有所帮助:)