2010-11-09 20 views
2

任何人都可以解釋在設備驅動程序中使用自旋鎖的確切用法。 我很困惑,因爲在許多中斷處理程序中我看到了自旋鎖。 螺旋鎖正忙着等待。它可以使延遲其他中斷.. 如有可能的列表中向下某些情況下對設備驅動程序中,我們可以使用自旋鎖設備驅動程序中的自旋鎖

我是新來這個領域。你的幫助爲我提供了一些初步的提升。

+0

http://en.wikipedia.org/wiki/Spinlock – 2010-11-09 14:50:23

回答

4

自旋鎖用於高Irql場景,您無法將自己的量子給調度器。

因此,例如,當您要鎖定某些數據結構(中斷外)時,您將獲得互斥鎖。當其他人擁有互斥鎖時,線程將進入調度程序中的「等待」列表,直到互斥量被釋放。然後,它獲得互斥鎖的所有權,並且訪問它的所有其他線程在嘗試獲取互斥鎖時都會進入休眠狀態。

當你在一箇中斷,你不能這樣做。你既沒有線程上下文,也不應該'無限期地'推遲這個中斷。但有時,您確實需要訪問中斷內的共享數據。當系統中存在多個CPU時,可以同時運行多箇中斷和線程。所以你必須保護工作隊列,共享對象等,以免它們損壞。爲此,您使用自旋鎖。 由於策略是在自鎖鎖定部分內儘可能少地執行任務,因此可以預期,只有在幾個週期內旋轉鎖本身才會產生問題,直到它被所有者釋放。

那麼,從這個拿,就是當你從中斷訪問共享數據,你使用自旋鎖,因爲有可用於任何其他原語。

如上所述,始終只在非常少量的時間內保持螺旋鎖。