c++ - 具有两个串联线程的 OpenMP 填充数组

标签 c++ arrays synchronization openmp

我有一个数组。因此,我需要使用 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);
}

关于c++ - 具有两个串联线程的 OpenMP 填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33064972/

相关文章:

ios - 如何同步iOS设备上的应用数据和核心数据?

java - java变量本身线程安全吗?什么时候更新变量?

c++ - 相对于 memset,我可以从 std::fill_n(ptr, n, 0) 获得什么性能?

c++ - 左填充在 QListWidget 中不起作用

c++ - 如何在 C++ 程序中获取当前日期?

javascript - jQuery - 通过改变合并两个数组

c++ - 将 std::queue 与 shared_ptr 一起使用?

传递给 execvp(2) 的 c 字符串操作

java - 为什么二维数组的元素会重复?

git - 使用 Git/Github 在 PC/Laptop/WebInterface 之间同步我的项目