OpenMP 线程编程详解
1. OpenMP 中的 flush 构造使用示例
OpenMP 提供了 flush 构造用于线程间的数据同步。以下是一个示例,展示了两个线程如何使用 flush 构造来同步数组 work 和 sync 的更新:
#pragma omp parallel private (iam, neighbor) shared (work, sync)
{
iam = omp_get_thread_num();
sync[iam] = 0;
#pragma omp barrier
work[iam] = do_work();
#pragma omp flush (work)
sync[iam] = 1;
#pragma omp flush (sync)
neighbor = (iam != 0) ? (iam - 1) : (omp_get_num_threads() - 1);
while (sync[neighbor] == 0) {
#pragma omp flush (sync)
{ }
}
combine (work[iam], work[neighbor]);
}
在这个示例中,两个线程 i ( i = 0,1 )分别计算数组 work 中的 w
订阅专栏 解锁全文
559



被折叠的 条评论
为什么被折叠?



