1

スレッドを使用しているときに、次のコードで問題が発生しています。

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();
      }
    );
  }
}
4

1 に答える 1