Ami*_*mit 5 c++ multithreading memory-model c++11 data-race
(假设:int x{ 6 }并且2个评价x = 6同时写入)
--
CPP 参考资料中提到内存模型:线程和数据竞争:
当一个表达式的计算写入一个内存位置而 另一个计算读取或修改同一内存位置时,这些表达式被称为冲突。具有两个相互冲突的评估的程序会发生数据竞争,除非:
两个评估在同一线程或同一信号处理程序中执行,或者
两个相互冲突的求值都是原子操作(参见 std::atomic),或者
一个相互冲突的评估发生在另一个评估之前(请参阅 std::memory_order)。
如果发生数据竞争,则程序的行为是不确定的。
参考文献说:“另一评价修改”;它没有说“另一篇评论写道”。
--
C++ 标准关于6.9.2.2 数据竞争的规定:
- 如果两个表达式求值之一修改内存位置 ([intro.memory]),而另一个表达式求值读取或 修改同一内存位置,则两个表达式求值会发生冲突。
--
将相同的值重新写入内存位置是否算作修改内存?
将相同的值写入内存位置是否算作修改内存?
是的,例如,定义对标量对象(即内存位置实际上是位字段的例外)的简单赋值来修改对象,无论对象要更改为什么值。请参阅[expr.ass]/2:
- 在简单赋值 (=) 中,通过用右操作数的结果替换其值来修改左操作数引用的对象([defns.access])。
您会发现影响标量对象值的所有其他表达式都有类似的措辞。
关于术语,标准通常不使用“ write ”,而是使用含义相同的“ modify ”。参见例如[defns.access]。
| 归档时间: |
|
| 查看次数: |
183 次 |
| 最近记录: |