1

让我们考虑一个场景:-

内核线程获取锁并在发生中断时处于临界区的中间。中断处理程序运行并到达相同的临界区并尝试获取锁并进入睡眠状态。

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

// Some Code
 Acquire_lock()

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

Disable_lock()
4

1 回答 1

2

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

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

于 2013-02-06T23:12:32.813 回答