スレッドを使用しているときに、次のコードで問題が発生しています。
Microsoft のサイトで、 への追加concurrent_vector
はイテレータを混乱させないことを読んだのでmutex
、操作中は and を提供しませんでした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();
}
);
}
}