TBB数据对象是否可用于OpenMP? 我有一个C++程序,它使用OpenMP并行处理循环。

TBB数据对象是否可用于OpenMP? 我有一个C++程序,它使用OpenMP并行处理循环。,c++,openmp,tbb,C++,Openmp,Tbb,但是,有一些代码段使用队列和优先级队列等,只有在我声明对它们的访问是关键的情况下才能并行工作 另一种选择是使用TBB数据对象,例如concurrent\u queue。但是我可以在OpenMP中使用这些数据对象,而不使用TBB的任何其他部分吗 资源和链接感谢 谢谢 更新 例如,是否允许以下类型的TBB和OpenMP混合 concurrent_queue<int> queue; #pragma omp parallel for for( int i=0; i<1000; i++

但是,有一些代码段使用队列和优先级队列等,只有在我声明对它们的访问是关键的情况下才能并行工作

另一种选择是使用TBB数据对象,例如
concurrent\u queue
。但是我可以在OpenMP中使用这些数据对象,而不使用TBB的任何其他部分吗

资源和链接感谢

谢谢

更新

例如,是否允许以下类型的TBB和OpenMP混合

concurrent_queue<int> queue;
#pragma omp parallel for
for( int i=0; i<1000; i++ )
    queue.push(i);
并发队列;
#pragma-omp并行

对于(int i=0;iTBB,它设计用于openMP,在程序员手册中列出了它的工作原理


您可以随时将关键部分更改为TBB互斥体,或std::带有作用域锁定的互斥体。

TBB中的所有并发数据结构和同步对象在OpenMP中都可以正常工作(任务也可以,但这可能有点愚蠢).

为了补充其他人的答案,您要查找的信息也可以在TBB教程中找到(请参阅)。几个摘录:

英特尔®线程构建块与其他线程兼容 因为库不是为解决所有线程问题而设计的, 它可以与其他线程包无缝共存

-

“英特尔线程构建块”提供了高度并发的容器 这些容器可以与原始Windows*或Linux*线程一起使用,也可以在 与基于任务的编程相结合


另一种选择是cilk++Thank@pyCthon。我的存储库中似乎没有它,所以我不愿意使用它。不过,我会记住它。Rick,你的答案既不包括源代码也不包括链接。我确实记得读到过TBB和OpenMP线程可以共存,但这可能会导致过度提交内核。这不仅愚蠢,而且还可能导致错误糟糕的做法。我参与了一些数据结构的规范,并且非常熟悉它们,请查看我的配置文件。所有并发_foo数据结构在tbb和openmp中都是线程安全的,锁和原子类也可以使用。如果您选择查找,您可以在tbb文档中找到这些信息。我有一个我一直认为stackoverflow的一个优点是它将分散在多个来源的知识聚合到一个易于搜索的位置。您的个人资料不是一个明显的信息来源,单凭您的断言也不够。我一直在查看文档,但还没有找到d这里有一个清晰或简洁的答案。如果你知道它在哪里,我邀请你在这里发布。在兼容性下。它也在参考手册的第12.2.8节中列出。