0

我是 linux 领域的新手。

我对在各种情况下使用自旋锁(在内核模式下)有些困惑。请说清楚。

自旋锁用作忙等待机制。

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

2) Spinlocks(Uniprocessor + Preemptive kernel)-->不应该使用,因为它浪费资源。(当线程在持有锁的情况下休眠会发生什么??其他进程可以正常执行吗?)

3) Spinlocks(Multiprocessor + Preemptive kernel)-->应谨慎使用。(当线程在持有锁的情况下休眠时会发生什么??其他进程可以正常执行吗?)

请让我知道我对上述情况的理解是否正确,并请提供任何额外的信息来帮助我澄清自旋锁的使用。

4

1 回答 1

1

IIRC,在 UP 的情况下,自旋锁大部分被忽略(除了可能禁用抢占,对于一些自旋锁功能变体,还有 IRQ)。

在多处理器情况下,抢占再次被禁用,IRQ 也可能被禁用。

一般来说,持有自旋锁的任务不应该处于休眠状态。(如果他们只是禁用中断,那就更是如此)

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

于 2013-03-04T21:23:49.600 回答