我确信我的头衔不是十全十美的,所以让我澄清我自己。
本文介绍: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”。
我希望你能理解我的要求。
发布于 2013-10-11 12:53:37
int d = _data;
确实是一种读和写。但是写入是对本地的、堆栈上的、变量d
的,对那里的讨论不感兴趣。
令人感兴趣的是,当有多个线程访问同一个对象并因此访问相同的内存时,从成员变量_data
读取/写入的顺序是什么。对于本地d
变量,每个线程都有自己的堆栈,并且在这些示例中没有关于访问d
的多线程问题。
本文讨论_data
变量,而不是d
变量。每当有人读/写到_data
时,这是一个有趣的部分,因为这是一个人必须注意的关于多线程的内存重新排序的地方。int d = _data
也写到d
是完全不相关的。
通过注释// Read 1
,这意味着我们谈论的是_data
--在这一行代码中没有对_data
的写。
https://stackoverflow.com/questions/19318559
复制相似问题