2010-08-05 13 views
2
  1. 兩個CPU可以同時同時保存兩個「不同的」自旋鎖嗎?在同一處理器上的兩個自旋鎖?

  2. 所以......這是否意味着:一個sigle(單處理器)CPU不能同時持有兩個「不同的」螺旋鎖?

  3. 那麼......這是否意味着:自旋鎖在單CPU上的號碼不能是> 1

PS:用不同的內存資源相關的「不同」意味着自旋鎖。


有沒有人知道螺旋鎖是如何在內部工作的? ...我的意思是,他們是否在測試設置操作期間凍結了公交車?我用Google搜索,但沒有絕對的答案。

回答

2

自旋鎖或多或少只是一個共享int,寫入是同步的。處理器沒有特殊標誌。所以你可以獲得更多的自旋鎖。 (你不應該......)

爲了防止單處理器系統被鎖住,windows會將IRQL提升到DISPATCH_LEVEL。處理器只能在DISPATCH_LEVEL上運行一個「線程」,因此在同一時間鎖定多個自旋鎖對於這些系統是安全的。

的實施應該是這樣的:(不是100%正確的,可由於發散細節)

LONG lock = 0; 

KeAcquireSpinlock(...) 
{ 
    // raise irql. etc. 
    while(InterlockedExchange(&lock, 1) != 0) 
     /* do nothing*/; 
} 

KeReleaseSpinLock(...) 
{ 
    InterlockedExchange(&lock, 0); 
    // lower irql ... etc. 
} 

InterlockedExchange保證了交換髮生原子爲同一存儲器總線上所有的處理器。所以它必須鎖定內存總線,或者至少強制特定緩存行的唯一所有權。

+0

「處理器只能在DISPATCH_LEVEL上運行一個'線程',因此同時鎖定多個自旋鎖,在這些系統上是安全的。」 這是信息。失蹤。感謝這清除了我對單處理器螺旋鎖的懷疑。 – bakra 2010-08-05 12:24:03

相關問題