什么是处理器的内存读写操作

时间:2013-10-11 12:48:21

标签: cpu-cache

我确定我的头衔并不完美,所以让我清楚自己。

通过这篇文章: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");
}

为什么读取1只算作读数而不是写作?我的意思是,最后'_data'的内容被写为'd'。

我希望你明白我的要求。

1 个答案:

答案 0 :(得分:1)

int d = _data;确实是一个读写。但是写入是堆栈上的本地变量d,并且对于那里的讨论不感兴趣。

当有多个线程访问同一个对象并因此访问相同的内存时,感兴趣的是成员变量_data的读/写顺序。对于本地d变量,每个线程都有自己的堆栈,并且在这些示例中没有关于访问d的多线程问题。

本文讨论了_data变量,而不是d变量。每当有人读/写_data时,这就是有趣的部分,就像多线程的内存重新排序是必须要注意的事情。 int d = _data也写入d完全无关紧要。

通过评论// Read 1,暗示我们正在谈论_data - 并且在该行代码上没有写_data