用两个线程串联的OpenMP填充数组

OpenMP filling array with two threads in series

本文关键字:OpenMP 填充 数组 线程 两个      更新时间:2023-10-16

我有一个数组。因此,我需要用两个线程填充它,分别使用omp_set_lock和omp_unset_lock。第一个线程应该写第一个值,然后第二个数组应该写第二个值,等等。我不知道如何做到这一点,因为,在openmp你不能显式地让一个线程等待另一个。有什么想法吗?

为什么不试试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);
}