内核抢占,同时持有螺旋锁

时间:2011-03-07 04:52:16

标签: linux operating-system linux-kernel

在linux内核中,如果在持有自旋锁的情况下启用了内核抢占,那么死锁怎么会发生呢?

1 个答案:

答案 0 :(得分:4)

内核抢占并不能保证您没有死锁。

线程可能仍然保持锁定而不释放它,如果某个其他线程想要获取同一个锁,那么仍然会导致死锁。持有锁的线程必须决定释放它以避免死锁。也就是说线程或其他一些逻辑必须抢占线程使其释放锁。内核本身不能导致线程释放锁。

内核只是可以安排其他线程运行,但如果某个其他线程依赖于第一个线程完成,那么该线程也会被阻塞。

例如:

线程A正在等待线程B获取的某些共享资源的锁定。

线程A获取被抢占,线程B被安排。

线程B正在等待锁定某个共享资源线程A正在持有。

死锁。线程A和线程B都不能取得进展。

要打破僵局,必须先取消线程A或B以释放它的锁定。内核抢占无法做到这一点。