用户定义的对象的c ++指针是否可以安全地读取?

pau*_*546 3 c++ multithreading pointers thread-safety

我找不到答案,但这是一个简单的问题:

两个线程在没有锁或任何其他恶作剧的情况下同时读取c ++中用户定义对象的指针值是否安全?

Joe*_*rgB 7

是.实际上同时读取任何值(内置类型)是安全的.

如果某个值与使用它的某个其他线程同时修改,则只能发生数据争用.标准的主要陈述是:

数据争在§1.10/ 21限定:

程序的执行包含数据竞争,如果它在不同的线程中包含两个冲突的动作,其中至少有一个不是原子的,并且都不会在另一个之前发生.

在§1.10/ 4中定义冲突的地方:

如果其中一个修改内存位置(1.7)而另一个访问或修改相同的内存位置,则两个表达式评估会发生冲突.

因此,您必须在这些读取和任何写入之间使用适当的同步.