0

我在下面在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”

4

0 回答 0