Я столкнулся с какой-то странной проблемой в приведенном ниже коде, который скомпилирован в linux,
В приведенном ниже фрагменте кода выполняется итерация карты " ObjectsMap " из Begin и внутри цикла итерации,Я пытаюсь изменить значение другого ключа на той же карте " 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 полученное мной значение не является нежелательным.Но это неверное значение, значение выше ожидаемого - я имею в виду "externalItr-> second.execTime" некоторых более неправильных ключей, также добавляется в "innerItr-> second.selfTime"