質問

  1. 2 つの CPU が 2 つの「異なる」スピン ロックを同時に保持できますか?

  2. つまり...これは次のことを意味します:単一(ユニプロセッサ)CPU は 2 つの「異なる」スピンロックを同時に保持できませんか?

  3. つまり...これは次のことを意味します:単一の 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保証を交換が同じメモリバス上のすべてのプロセッサに対してアトミックに起こること。特定のキャッシュ・ラインのメモリバス、または少なくとも力の唯一の所有権をロックする必要があり、それはとてもます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top