多线程场景下,向内存地址写入相同值是否算作修改内存?
C++多线程数据竞争相关疑问
(假设:int x{ 6 },且有两个求值操作同时执行x = 6)
CPP参考文档中关于多线程执行与数据竞争的描述:
当一个表达式求值操作写入某个内存地址,且另一个表达式求值操作读取或修改同一内存地址时,这两个表达式被视为存在冲突。存在冲突求值操作的程序会发生数据竞争,除非满足以下条件之一:
- 两个求值操作都在同一线程或同一信号处理程序中执行;
- 两个冲突的求值操作都是原子操作(参见std::atomic);
- 其中一个冲突的求值操作先于另一个执行(参见std::memory_order)。
若发生数据竞争,程序行为将未定义。
参考文档中使用了*“表达式求值操作写入”与“另一表达式求值操作读取或修改”*的表述。
(假设两个求值操作写入的值相同)向内存地址写入相同值是否算作修改内存?
更新:
C++标准中关于数据竞争的规定:
- 若其中一个求值操作修改了某个内存地址,且另一个求值操作读取或修改同一内存地址,则这两个表达式求值操作存在冲突。
基于C++标准,我已修正参考文档中的段落,将其中的写入替换为修改。
内容的提问来源于stack exchange,提问作者Amit
相关产品推荐
相关产品推荐

