【发布时间】:2019-04-07 03:46:38
【问题描述】:
我正在阅读 Robert Love Book,对这条线有点困惑。代码持有信号量可以被抢占是什么意思?
如果在访问用户空间应用程序在临界区执行代码时访问相同变量时发生中断,那么用户空间应用程序可以被抢占吗?
如果我的上述理解是正确的,那么当用户空间应用程序处于临界区时,除了自旋锁之外别无选择来禁用中断?
那么信号量在 OS 环境中的用途是什么?当用户应用程序处于临界区时,任何时候都可能发生中断,为了避免中断干预,我们需要一直使用自旋锁。
【问题讨论】:
-
你的问题的问题是我们不知道上下文。什么样的信号量?内核可以实现一个信号量,这样持有它的进程就不能被抢占。或者它可以实现一个信号量,这样持有它的进程就不会被抢占。
-
是的,但根据我的理解,我们无法实现在中断发生时无法被抢占的信号量?
-
您可以阻止抢占作为获取信号量的一部分。这不正常,但可以做到。
标签: linux operating-system synchronization semaphore spinlock