我在下面在linux中编译的代码中遇到了一些奇怪的问题,
下面的代码从 Begin 和迭代循环中迭代一个映射“ ObjectsMap ”,我试图更改同一个映射“ ObjectsMap ”中不同键的值。
map<int, ObjectA>::iterator outerItr = reDt->ObjectsMap->begin();
for (; outerItr!= reDt->ObjectsMap->end(); outerItr++)
{
int parentid = outerItr->second.parentID;
map<int, ObjectA>::iterator innerItr = reDt->ObjectsMap->find(parentid);
if (innerItr != reDt->ObjectsMap->end())
{
innerItr->second.selfTime = innerItr->second.selfTime + outerItr->second.execTime;
}
}
执行此代码时,我在selfTime中得到不正确/意外的值。但是,如果我在 if() 块中添加一些日志,那么奇怪的是该值是正确的。如果日志被删除,那么我在selfTime中再次得到不正确的值。
这里有什么奇怪的东西。?是因为数据竞争行为吗?
更新1:
我得到的selfTime值不是垃圾。但它是不正确的值,该值高于预期 - 我的意思是一些更不正确的键的“outerItr->second.execTime”也被添加到“innerItr->second.selfTime”