0

私のタイトルは完璧ではないので、私の自己をクリアさせてください。

この記事による:http://msdn.microsoft.com/en-us/magazine/jj863136.aspx

void Print()
 {
  int d = _data;     // Read 1
  if (_initialized)  // Read 2
    Console.WriteLine(d);
  else
    Console.WriteLine("Not initialized");
}

Read 1 が読み取りのみとしてカウントされ、書き込みとしてもカウントされないのはなぜですか? つまり、最終的に「_data」の内容が「d」に書き込まれます。

私が求めていることを理解していただければ幸いです。

4

1 に答える 1

1

int d = _data;確かに読み取りと書き込みです。しかし、書き込みはローカルのスタック上の変数dであり、そこでの議論には関係ありません。

興味深いのは、_data複数のスレッドが同じオブジェクトにアクセスしているため、同じメモリにアクセスしている場合のメンバー変数からの読み取り/書き込みの順序です。ローカルd変数の場合、各スレッドには独自のスタックがありd、これらの例でのアクセスに関してマルチスレッドの問題はありません。

この記事では、_data変数ではなく、d変数について説明します。誰かが に読み書きするときはいつでも_data、それは興味深い部分です。なぜなら、マルチスレッドに関するメモリの並べ替えが何かを認識しなければならないからです。それint d = _dataはまた、dまったく無関係です。

コメントによって、// Read 1私たちが話していることが暗示されます-そして、そのコード行には_data書き込みがありません。_data

于 2013-10-11T12:53:37.303 に答える