【发布时间】:2013-03-04 19:26:15
【问题描述】:
我是 linux 领域的新手。
我对在各种场景中使用自旋锁(在内核模式下)有些困惑。请澄清。
自旋锁用作忙等待机制。
1)自旋锁(单处理器+非抢占式内核)-->不存在(因为如果你在自旋锁中休眠会导致死锁)
2) Spinlocks(Uniprocessor + Preemptive kernel)-->不应该使用,因为它浪费资源。(当线程在持有锁时休眠会发生什么??其他进程可以正常执行吗?)
3) Spinlocks(Multiprocessor + Preemptive kernel)-->应该谨慎使用。(当线程在持有锁的情况下休眠会发生什么??其他进程可以正常执行吗?)
如果我对上述场景的理解是正确的,请告诉我,并请提供任何额外的信息来帮助我澄清自旋锁的使用。
【问题讨论】:
-
这是我之前做的一个:stackoverflow.com/questions/6555358/…
-
嗨 Anup,关于自旋锁的使用有很多注意事项。使用自旋锁的最佳位置是在您无法入睡的“中断上下文”中。在更新全局结构或全局变量的小代码路径中,您可以使用自旋锁。使用“irq_save”api 的自旋锁是最佳实践。
标签: linux linux-kernel linux-device-driver