首页 > 解决方案 > 代码持有信号量可以被抢占是什么意思

问题描述

我正在阅读罗伯特爱书,对这条线有点困惑。代码持有信号量可以被抢占是什么意思?

如果在临界区执行代码时访问用户空间应用程序具有的相同变量发生中断,那么用户空间应用程序可以被抢占吗?

如果我的上述理解是正确的,那么当用户空间应用程序处于临界区时,除了自旋锁之外没有其他替代方法可以禁用中断吗?

那么信号量在 OS 的上下文中有什么用呢?当用户应用程序处于临界区时,任何时候都可能发生中断,为了避免中断干预,我们需要一直使用自旋锁。

标签: linuxoperating-systemsynchronizationsemaphorespinlock

解决方案


代码持有信号量可以被抢占是什么意思?
这意味着当前在其临界区中运行的进程可以抢占为同步而持有一些锁。理想情况下,中断具有最高优先级,因此除非您禁用该处理器内核上的中断,否则正在运行的进程可能会被抢占,并且在进程处于其临界区时可能会发生这种情况。

虽然有多个 spin_lock_XXX api 来禁用中断,但您可能希望使用spin_lock_irqsave,因为它将中断标志保存在该内核上并在释放锁定时恢复它们。


推荐阅读