下面的简短代码基于第一次呼吸搜索。我希望与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;
}
答案 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。