У меня возникают проблемы со следующим фрагментом кода при использовании потоков.C++ concurrency :: concurrent_vector
Я прочитал на сайте Microsoft, что добавление к concurrent_vector
не портил с итераторов, так что я не предоставил и mutex
для продолжительности find_if
операции.
Так ошибка я получаю это «Нарушение прав доступа»
У меня есть 6 нитей, работающих одновременно. Должен ли я обернуть это в mutex
? Нужно ли это. Я довольно новичок в C++.
std::stringstream key;
key << "SearchString " << ID << ", " << "Options" << ", " << Date;
auto &it = std::find_if(
m_spList.begin(), m_spList.end(),
[&key] (std::unique_ptr<IBaseObject>const &bo){
return bo->ID() == key.str();
}
);
if (it != m_spList.end()) {
while (it != m_spList.end()) {
ReplacePartResult* rpr = dynamic_cast<ReplacePartResult*>(it->get());
if (rpr) {
if (rpr->ReplaceItem) {
replaceBOMID = rpr->BOMID > 0 ? rpr->BOMID : 0;
if (_parentPart) {
_parentPart->TemplateBomID = rpr->BOMID;
_parentPart->Name = rpr->Name;
_parentPart->Description = rpr->Description;
}
}
}
it = std::find_if(
++it, m_spList.end(),
[&key](std::unique_ptr<IBaseObject>const &bo){
return bo->ID() == key.str();
}
);
}
}
В какой строке есть нарушение доступа? Каковы другие темы? Можете ли вы создать [MCVE]? – Yakk