看了這個網址,對自選鎖造成的死鎖有了更深刻對理解。
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時要明確知道該鎖不會在中斷處理程序中使用。
- 事務隔離而取不到insert數據...
- system用戶遠程登錄em管理錯誤...
- 配12顆協同芯片 8500WN12核處...
- rhel6(內核版本2.6.32-220)上...
- 使用RMAN多通道進行壓縮優化...