我有一个数组。我需要使用omp_set_lock和omp_unset_lock来为每个值填充两个线程。第一个线程应该写第一个值,然后第二个数组应该写第二个值等。我不知道怎么做,因为,在openmp中你不能明确地让一个线程等待另一个。有什么想法吗?
答案 0 :(得分:1)
为什么不尝试使用omp_set_lock / omp_unset_lock函数?
omp_lock_t lock;
omp_init_lock(&lock);
#pragma omp parallel for
bool thread1 = true;
for (int i = 0; i < arr.size(); ++i) {
omp_set_lock(&lock);
if (thread1 == true) {
arr[i] = fromThread1();
thread1 = false;
} else {
arr[i] = fromThread2();
thread1 = true;
}
omp_unset_lock(&lock);
}