首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ concurrency::concurrent_vector

C++ concurrency::concurrent_vector
EN

Stack Overflow用户
提问于 2016-03-28 22:42:44
回答 1查看 318关注 0票数 1

我在使用线程时遇到了以下代码段的问题。

我在微软网站上看到,追加到concurrent_vector不会影响迭代器,因此我没有在find_if操作期间提供和mutex

所以我收到的错误是一个“访问冲突”

我有6个线程同时运行。我应该把它包装在mutex中吗?它需要一个吗。我对C++还是个新手。

代码语言:javascript
复制
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();
      }
    );
  }
}
EN

回答 1

Stack Overflow用户

发布于 2016-03-29 04:30:09

不是100%的原因,但我将find_if重构为一个新函数,并显式定义了我的迭代器类型,它似乎正在运行。也许将字符串流发送到lambda是问题所在?

代码语言:javascript
复制
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; });

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36264636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档