gpt4 book ai didi

locking - 非抢占式 linux 内核上的 spin_lock

转载 作者:行者123 更新时间:2023-12-03 18:24:27 25 4
gpt4 key购买 nike

我在具有 1 个 CPU 和非抢先式 linux 内核 (2.6.x) 的系统上读到过,spin_lock 调用相当于一个空调用,因此以这种方式实现。

我无法理解:它不应该等同于互斥锁上的 sleep 吗?例如,即使在非抢占式内核上,中断处理程序仍可能会被执行,或者我可能会调用一个使原始线程进入休眠状态的函数。因此,如果将空的 spin_lock 调用实现为互斥锁,那么它就不是“安全”的。

有什么我不明白的吗?

最佳答案

如果您要使用 spin_lock()在非抢占式内核上屏蔽数据以防止中断处理程序,您会死锁(在单处理器机器上)。

如果中断处理程序在其他内核代码持有锁时运行,它将永远旋转,因为常规内核代码无法恢复和释放锁。

只有当锁持有者可以一直运行到完成时才能使用自旋锁。

中断处理程序可能需要的锁的解决方案是使用 spin_lock_irqsave() ,它在自旋锁被持有时禁用中断。使用 1 个 cpu,没有中断处理程序可以运行,因此不会出现死锁。在 smp 上,中断处理程序可能会开始在另一个 cpu 上旋转,但由于持有锁的 cpu 不能被中断,因此锁最终会被释放。

关于locking - 非抢占式 linux 内核上的 spin_lock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3372541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com