我正在阅读Joe Duffy的Concurrent Programming on Windows
,并且发现了以下声明:
多个线程从共享位置创建数据的私有副本
这个陈述是在一个例子中给出的,其中Joe展示了如何从多个线程增加一个全局变量可能导致不可预测的结果,因为它们可能会在时间上重叠。
然而,我对这个陈述持怀疑态度,因为没有原子数据类型的私有副本 - 这会使它成为非原子的。
所以,当他说make private copies of data from a shared location
时,那就是他所说的所有非原子数据类型(用户定义的类型等),或者我错过了什么?
答案 0 :(得分:2)
由于我手头没有这本书,我只能猜测他正在谈论处理器如何执行代码。
将数据传输到CPU寄存器没有任何风险,因为这是CPU指令访问它的唯一方法。因此,从这个意义上说,每次线程使用来自共享位置的数据时,都必须进行临时私有复制。