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 回答