来自共享位置的私有数据副本

时间:2012-02-15 10:49:34

标签: c# windows multithreading concurrency

我正在阅读Joe Duffy的Concurrent Programming on Windows,并且发现了以下声明:

  

多个线程从共享位置创建数据的私有副本

这个陈述是在一个例子中给出的,其中Joe展示了如何从多个线程增加一个全局变量可能导致不可预测的结果,因为它们可能会在时间上重叠。

然而,我对这个陈述持怀疑态度,因为没有原子数据类型的私有副本 - 这会使它成为非原子的。

所以,当他说make private copies of data from a shared location时,那就是他所说的所有非原子数据类型(用户定义的类型等),或者我错过了什么?

1 个答案:

答案 0 :(得分:2)

由于我手头没有这本书,我只能猜测他正在谈论处理器如何执行代码。

将数据传输到CPU寄存器没有任何风险,因为这是CPU指令访问它的唯一方法。因此,从这个意义上说,每次线程使用来自共享位置的数据时,都必须进行临时私有复制。