下面的这段简短代码基于呼吸优先搜索。我希望将其与 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;
}
最佳答案
Can std::queue concurrent insertion in OpenMP?
一般来说,没有。没有一个标准容器是安全的。您必须提供外部锁。
请参阅 Stack Overflow 上的相关问题:Are there any concurrent containers in C++11? 。另请参阅Concurrent Unordered Associative Containers for C++来自工作组和 C++11 STL containers and thread safety来自堆栈溢出。
关于c++ - OpenMP 中 std::queue 可以并发插入吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28258503/