可以在OpenMP中使用std :: queue并发插入吗?

时间:2015-02-01 01:29:59

标签: c++ multithreading queue openmp

下面的简短代码基于第一次呼吸搜索。我希望与OpenMP并行,但没有成功。有没有办法让多个线程使用OpenMP并行构造将项目插入队列?


#include <omp.h>
#include <iostream>
#include <queue>

using namespace std;

int main(){

  queue<int> q;
  int v;
  int cnt = 0;

  for (int i =0; i<10; i++){
    q.push(i);
    cnt += 1;
  }

  while (!q.empty()) {
    v = q.front();
    q.pop();
    cout << "v=" << v << ",";

    #pragma omp parallel for
    for (int i = 1; i < 6; i++) {
      int j = v*i + 3;
      if ( j < 13) {
        q.push(j);
        cnt += 1;
      }
    }

  }

  cout << endl << q.size() << endl;
  cout << "count=" << cnt << endl;

  return 0;

}

1 个答案:

答案 0 :(得分:3)

  

可以在OpenMP中使用std :: queue并发插入吗?

一般来说,不。没有一个标准容器是安全的。您必须提供外部锁。

请参阅Stack Overflow上的相关问题:Are there any concurrent containers in C++11?。另请参阅工作组中的Concurrent Unordered Associative Containers for C++和Stack Overflow中的C++11 STL containers and thread safety