且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

spin lock的理解

更新时间:2022-08-17 10:54:08

为什么在spin lock保护的代码里面不允许有休眠的操作呢?

因为spin lock不是空实现的前提下(内核没关抢占,或者是SMP打开),spin lock中是关抢占的,如果一个进程A拿到锁,内核抢占暂时被关闭了,然后A休眠了,此时由调度算法切换到了进程B执行,进程B想要想要获得这个锁的时候发生了死锁,尽管进程B的时间片会被用完,但是由于内核抢占被禁止了,所以B不会被调度出去,这就形成了死锁。

如果A用 spin_lock_irqsave的方式,那么此时中断都是被禁止的,时钟中断计数不会更新了,B的时间片自然不会更新













本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sky-heaven/p/7614770.html,如需转载请自行联系原作者