なぜこの部分のコードcomplete
がキャッシュされていますか?可変キャッシング
static void Main()
{
bool complete = false;
var t = new Thread (() =>
{
bool toggle = false;
while (!complete) toggle = !toggle;
});
t.Start();
Thread.Sleep (1000);
complete = true;
t.Join(); // Blocks indefinitely
}
しかし、この部分ではありませんか?
static void Main()
{
bool complete = false;
bool toggle = false;
var t = new Thread (() =>
{
while (!complete) toggle = !toggle;
});
t.Start();
Thread.Sleep (1000);
complete = true;
t.Join();
}
固定に関する問題ではありません。 **なぜ**最初のスニペットで 'compare'がキャッシュされますが、2番目にはありませんか? –
私はその点を逃しました。これは、2番目のスニペットのトグルがヒープで、1番目がローカル変数の書き込みであるためです。ヒープストアは特定の並べ替えを防ぎます。彼らは時々それらの間に "キャッシング"を防ぐ。どちらかは、x86/.NETメモリモデルによって正式に保証されるか、JITオプティマイザのクォーク/プロパティです。 – usr