為什麼在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,如需轉載請自行聯系原作者