OpenMP和unordered_map,双重释放或损坏

时间:2019-06-11 07:54:35

标签: c++ openmp unordered-map

使用OpenMP处理unordered_map时出现错误。在for循环中,我正在寻找元素,如果它们存在,我将对其进行更新,否则将创建它们。

我将它与OpenMP并行化,并且出现double free or corruption错误。


我做了一个简单的例子:

#include <cstdlib>

#include <iostream>
#include <string>

#include <unordered_map>

#include <omp.h>

int main() {

  std::unordered_map<int, std::string> myMap;
  std::unordered_map<int, std::string>::iterator it;

  std::string myStr("Test");
  int i;

  for (i=0 ; i<20 ; ++i) {
    myMap.insert({i, myStr});
  }

  #pragma omp parallel default(none)          \
                       private(it)            \
                       shared(myMap, myStr)
  {

  #pragma omp for
  for (i=0 ; i<100 ; ++i) {
    if ((it=myMap.find(i))==myMap.end()) {
      // Create the element
      myMap.insert({i, myStr});
    }
    else {
      // Update the element
    }
  }

//  std::cout << omp_get_num_threads() << std::endl;
  }


  return EXIT_SUCCESS;
}

此示例不会始终重现该错误。请确保运行几次,然后告诉我一切正常。

当我在Gdb中运行我的真实代码时,它告诉我错误来自findinsert

0 个答案:

没有答案