spinlock造成死鎖的原因

看了這個網址,對自選鎖造成的死鎖有了更深刻對理解。
http://blog.csdn.net/zhanglei4214/article/details/6837697

spin_lock比spin_lock_irq速度快,但是它並不是任何情況下都是安全的。

舉個例子:進程A中調用了spin_lock(&lock)然後進入臨界區,此時來了一箇中斷(interrupt),

該中斷也運行在和進程A相同的CPU上,並且在該中斷處理程序中恰巧也會spin_lock(&lock)

試圖獲取同一個鎖。由於是在同一個CPU上被中斷,進程A會被設置爲TASK_INTERRUPT狀態,

中斷處理程序無法獲得鎖,會不停的忙等,由於進程A被設置爲中斷狀態,schedule()進程調度就

無法再調度進程A運行,這樣就導致了死鎖!

但是如果該中斷處理程序運行在不同的CPU上就不會觸發死鎖。 因爲在不同的CPU上出現中斷不會導致

進程A的狀態被設爲TASK_INTERRUPT,只是換出。當中斷處理程序忙等被換出後,進程A還是有機會

獲得CPU,執行並退出臨界區。

所以在使用spin_lock時要明確知道該鎖不會在中斷處理程序中使用。



<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
閱讀(92) | 評論(0) | 轉發(0) |
給主人留下些什麼吧!~~
評論熱議
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章