3

1 つのスレッドがループ内の変数の変更を待っている状況に興味があります。while

while (myFlag == false) {
    // do smth
}

それは無限に繰り返されています。

その間、別のスレッドがこの変数の値を変更しました:

myFlag = true;

この変数が揮発性でない場合、リーダースレッドは他のスレッドで変数の値を変更した結果を見ることができますか? 一般的に、私が理解しているように、それは決して起こりません。それとも私が間違っていますか?では、いつ、どのような状況で、最初のスレッドが変数の変更を確認してループを終了できるのでしょうか? volatileこれはキーワードを使用せずに可能ですか? この状況では、プロセッサのキャッシュのサイズが影響しますか?

説明して理解を助けてください!前もって感謝します!!

4

2 に答える 2

8

この変数が揮発性でない場合、リーダースレッドは他のスレッドで変数の値を変更した結果を見ることができますか?

できるかもしれません、はい。ただ、確実に変化が見られるわけではありません。

一般的に、私が理解しているように、それは決して起こりません。

いいえ、そうではありません。

変数に書き込んでから、別のスレッドで読み込んでいます。表示されるかどうかは、関連する正確なプロセッサとメモリ アーキテクチャによって異なります。メモリバリアが関係していなければ、新しい値が表示される保証はありませんが、表示されない保証もありません。

于 2013-09-30T21:26:58.157 に答える