OpenMP和不同的STL向量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenMP和不同的STL向量相关的知识,希望对你有一定的参考价值。
这样安全吗?或者我们需要取消注释“关键”的实用主义?
std::vector< std::vector<int> > vv(10);
#pragma omp parallel for
for (int i=0; i<10; ++i)
for (int j=0; j<100; ++j)
// Should we uncomment the following pragma?
// #pragma omp critical
vv[i].push_back(j);
答案
给定的代码是安全的,因为所有线程都将在vv
的不同元素上运行。 std::vector
是弱线程安全的,因为你可以根据需要在不同的向量上同时操作。
另一答案
简短的回答
简短的回答:不要退缩,没有关键部分是安全的
答案很长
不需要关键部分,因为echo线程被赋予for
循环的唯一迭代子集(您可以应用不同的策略来分发它们)。对你来说重要的是没有竞争条件,当在同一个向量上添加元素时(push_back
本身不是线程安全的)。
在你的情况下,每个线程总是只访问它自己的向量集,所以两个线程没有机会写相同的vector
。
以上是关于OpenMP和不同的STL向量的主要内容,如果未能解决你的问题,请参考以下文章