线程/进程必须在执行关键部分时禁用中断

时间:2013-02-06 22:53:12

标签: locking interrupt critical-section interrupt-handling

让我们考虑一个场景: -

内核线程获取锁定,并在发生中断时位于关键部分的中间。 中断处理程序运行并到达同一个关键部分并尝试获取锁定并进入休眠状态。

是否会发生这种情况或在关键部分禁用中断? 采取了哪些措施来避免它?

// Some Code
 Acquire_lock()

Critical section   //Interrupt occurs and arrives to acquire the same lock.

Disable_lock()

1 个答案:

答案 0 :(得分:2)

您永远不会允许持有锁的代码被试图获取相同锁的代码中断。如果您的意思是在操作系统内部,则可能需要禁用代码中的所有中断,这些中断与也由中断处理程序操纵的对象进行交互。

用户空间线程和进程没有这样的问题。没有中断处理程序获取用户空间线程可以获取的锁。如果一个持有用户空间锁的线程被中断,它将在重新安排后立即释放它 - 用户空间线程仍然可以运行。