1

TSETは、いくつかのことを行う不可分なマシンコード命令です。そのロジックを次のように考えてください。

TSET(X)
if (x == 0) {
    x = 1;
    return true;
} else
    return false;

従来のOSの教科書によると、スレッドの同期に依存しています。セマフォの実装で使用される場合があります。分割できないため、同じCPUでスレッドがタイムリーに切り替わった場合でも、クリティカルセクションへのエントリを保護するために使用できます。単一のCPUでの使用は、(私には)すでによく理解されています。

私のハードウェアの知識が不足しているのは次のとおりです。異なるCPU上の2つの競合するスレッドが、同じTSET(x)を「同時に」発行した場合はどうなりますか。これにより、各CPUのフェッチ実行サイクルが同期されているかどうか(およびどのように同期されているか)を尋ねられます。CPU1での命令が発生し、次にCPU2での命令が発生し、次にCPU1が再び発生するということですか?これはどのように行われるのですか?私は理にかなっていますか?私は自分の質問に答えましたか?

4

1 に答える 1

0

xこの魔法の命令は、アトミック/不可分、IOW であると想定されており、0 と比較される時間と 1 に設定される時間の間で何も変更できないはずです。

それが要点です。あなたの本を注意深く読むと、同様のコード (読み取り/比較 + 変更) が非原子性のために惨めに失敗する悪い競合状態の例が表示されます (そのような言葉はありますか?)。

自分で考えてください。

この命令がアトミックではなく、不幸なスケジューリングのために 2 つの同時スレッド/プロセスがこの順序で実行された場合はどうなるでしょうか?:

1: if (x==0)
2: if (x==0)
1: x=1, return true
2: x=1, return true

両方のスレッド/プロセスは、このロック変数がアクセスを保護していたオブジェクトへの排他的アクセスを取得したと考えますx。良くない。

于 2012-10-13T14:15:14.553 に答える