【发布时间】:2011-11-17 02:12:03
【问题描述】:
根据OpenMP Memory Model,以下不正确:
int *p0 = NULL, *p1 = NULL;
#pragma omp parallel shared(p0,p1)
{
int x;
// THREAD 0 // THREAD 1
p0 = &x; p1 = &x;
*p1 ... *p0 ...
}
我的示例如下所示:
int *p0 = NULL, *p1 = NULL;
#pragma omp parallel shared(p0,p1)
{
int x;
// THREAD 0 // THREAD 1
p0 = &x; p1 = &x;
#pragma omp flush
#pragma omp barrier
*p1 ... *p0 ...
#pragma omp barrier
}
这是不正确的吗?我在内存模型中找不到不允许这样做的东西。
我假设我的玩具示例是正确的,就像在 3.1 中的内存模型中一样,只要程序员确保它仍然存在,它们就允许任务访问私有变量。鉴于任务可以解开,理论上它们可以在不同的工作线程中执行,因此允许 OpenMP 线程访问另一个线程的私有内存。
【问题讨论】:
标签: c++ c multithreading openmp