自旋锁 - (单处理器与多处理器) - (抢占式与非抢先式内核)

时间:2013-03-04 19:26:16

标签: linux linux-kernel linux-device-driver

我是linux领域的新手。

在各种情况下,我对使用自旋锁(在内核模式下)感到困惑。请澄清。

Spinlocks用作繁忙的等待机制。

1)自旋锁(单处理器+非抢占式内核) - >不存在(因为如果你在自旋锁中睡觉会导致死锁)

2)自旋锁(单处理器+抢占式内核) - >不应该因为它浪费资源而使用。(当线程在持有锁时休眠时会发生什么?其他进程可以正常执行吗?)

3)自旋锁(多处理器+抢占式内核) - >应谨慎使用。(当线程在持有锁时休眠时会发生什么?其他进程可以正常执行吗?)

如果我对上述情况的理解是正确的,请告诉我,请提供任何额外的信息,以帮助我澄清自旋锁的使用。

1 个答案:

答案 0 :(得分:1)

IIRC,在UP情况下,自旋锁大部分被忽略(除了可能禁用抢占,以及一些自旋锁功能变体,也是IRQ)。

在多处理器的情况下,Preemption再次被禁用,IRQ也可能是。

通常,持有自旋锁的任务不应该处于休眠状态。 (如果他们只是禁用了中断的话,那么双重的话)

(免责声明:帖子内容可能温和/非常不准确,因为已经很晚了,我无法验证ATM的详细信息)