OpenMP和不同的STL向量

时间:2018-06-28 07:43:50

标签: c++ stl openmp

这样安全吗?或者我们需要取消对“关键”实用程序的注释?

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);

2 个答案:

答案 0 :(得分:0)

给定的代码是安全的,因为所有线程将在vv的不同元素上运行。 std::vector的线程安全性很弱,因为您可以根据需要同时对不同的向量进行操作。

答案 1 :(得分:0)

简短答案

简短的回答:不要取消注释,没有关键部分是安全的

长期回答

不需要关键部分,因为回声线程从RUN localedef -v -c -i en_US -f UTF-8 en_US; exit 0 RUN sed -i 's/en_US.UTF-8/en_US/g' /etc/sysconfig/i18n && source /etc/sysconfig/i18n 循环中获得了唯一的迭代子集(可以应用各种不同的策略来分配它们)。 对您而言重要的是,不会在同时向同一向量添加元素时发生竞争条件(for本身不是线程安全的。)

在您的情况下,每个线程始终且仅访问其自己的向量集,因此,两个线程不可能写相同的push_back