同じプロセッサ上に 2 つのスピンロックがありますか?
-
26-09-2019 - |
質問
2 つの CPU が 2 つの「異なる」スピン ロックを同時に保持できますか?
つまり...これは次のことを意味します:単一(ユニプロセッサ)CPU は 2 つの「異なる」スピンロックを同時に保持できませんか?
つまり...これは次のことを意味します:単一の CPU 上のスピンロックの数は 1 を超えることはできません。
PS:「異なる」とは、異なるメモリ リソースに関連付けられたスピンロックを意味します。
スピンロックが内部でどのように機能するか知っている人はいますか?...つまり、テスト セットの操作中にバスがフリーズするのでしょうか?グーグルで調べましたが、絶対的な答えはありません。
解決
スピン・ロックは、多かれ少なかれ書き込みが同期されているにのみ共有int型、です。プロセッサのための特別なフラグはありません。だから、もっとして1スピンロックを取得することができます。 (あなたが...いけない)
ロックアップからユニプロセッサ・システムを防ぐために、、ウィンドウがDISPATCH_LEVEL
にIRQLを上昇させます。プロセッサは、唯一の「スレッド」は、同時に複数のスピンロックをロックするので、これらのシステムに安全である、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
保証を交換が同じメモリバス上のすべてのプロセッサに対してアトミックに起こること。特定のキャッシュ・ラインのメモリバス、または少なくとも力の唯一の所有権をロックする必要があり、それはとてもます。
所属していません StackOverflow