我在使用线程时遇到了以下代码段的问题。
我在微软网站上看到,追加到concurrent_vector不会影响迭代器,因此我没有在find_if操作期间提供和mutex。
所以我收到的错误是一个“访问冲突”
我有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();
}
);
}
}发布于 2016-03-29 04:30:09
不是100%的原因,但我将find_if重构为一个新函数,并显式定义了我的迭代器类型,它似乎正在运行。也许将字符串流发送到lambda是问题所在?
concurrency::concurrent_vector<std::unique_ptr<IBaseObject>>::iterator IBaseObject_FindKey(concurrency::concurrent_vector<std::unique_ptr<IBaseObject>>& mv, std::string const& _key)
{
return std::find_if(std::begin(mv), std::end(mv), [&_key](std::unique_ptr<IBaseObject>const &bo){return bo->ID() == _key; });
}https://stackoverflow.com/questions/36264636
复制相似问题