【发布时间】:2019-01-14 23:45:38
【问题描述】:
我想创建一个映射整数对的整数向量。我的目的是以并行方式进行。为了确保我不会同时尝试 push_back 到同一个内存实体(通过多个线程),map 的密钥对的第二个坐标负责当前线程号。然而,我遇到了问题。似乎某些值没有正确插入。我没有得到 10 个值,而是总是更少(有时是 9,有时是 8、6 等)
map<pair<int, int>, vector<int> > test;
#pragma omp parallel num_threads(8)
{
#pragma omp for
for (int i = 0;i < 10;i++)
{
test[make_pair(i % 3, omp_get_thread_num())].push_back(i);
}
}
我也试过test.at(make_pair(i % 3, omp_get_thread_num())).push_back(i),但也没有用。但是,在这种情况下,执行因异常而中断。
我认为#pragma omp for 将for 循环分配到 (0,...,9) 的不相交子序列中,因此我的代码不应该有问题...我有点困惑。有人可以向我解释这个问题吗?
【问题讨论】:
标签: c++ multithreading openmp