2
在linux内核中,如果在持有自旋锁的情况下启用内核抢占,死锁会如何发生?内核占先抢占自旋锁
在linux内核中,如果在持有自旋锁的情况下启用内核抢占,死锁会如何发生?内核占先抢占自旋锁
内核抢占并不能保证你没有死锁。
一个线程仍然可以保持一个锁而不会释放它,并且如果某个其他线程想要获取同一个锁,这仍然会导致死锁。持有锁的线程必须决定释放它以避免死锁。也就是说,线程或其他逻辑必须抢占线程和使其释放锁。内核本身不会导致线程释放锁。
内核只是可以安排其他线程运行,但如果某个其他线程依赖于第一个线程完成,那么该线程也会被阻塞。
例如:
线程A正在等待该线程B已经获得了一些共享资源的锁定。
线程获取的抢占和线程B得到安排。
线程B正在等待锁定某个共享资源线程A正在等待锁定。
死锁。线程A和线程B都不能取得进展。
要打破僵局,必须先取消线程A或B才能释放它的锁定。内核抢占不能做到这一点。
@Ben:同意。稍后我会澄清在什么情况下会出现僵局。但是,你的观点是有效的。我会修改评论以使其更清楚。谢谢。 –