Nan*_*iao 2 c c++ parallel-processing multithreading openmp
我的要求是这样的:每个线程自己分配内存,然后处理它:
typedef struct
{
......
}A;
A *p[N];
#pragma omp parallel
{
#pragma omp for
for (int i = 0; i < N; i++) {
p[i] = (A*)calloc(sizeof(*p[i]), N);
if (NULL == p[i]) {
return;
}
......
}
}
Run Code Online (Sandbox Code Playgroud)
但编译器会抱怨:
error: invalid exit from OpenMP structured block
return;
Run Code Online (Sandbox Code Playgroud)
所以除了把分配内存代码放在#pragma omp parallel:
for (int i = 0; i < N; i++) {
p[i] = (A*)calloc(sizeof(*p[i]), N);
if (NULL == p[i]) {
return;
}
}
#pragma omp parallel
{
#pragma omp for
......
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法?
我想你正在寻找这个:
#pragma omp parallel
{
#pragma omp for
for (int i = 0; i < N; i++) {
p[i] = (A*)calloc(sizeof(*p[i]), N);
if (NULL == p[i]) {
#pragma omp cancel for
}
......
}
}
Run Code Online (Sandbox Code Playgroud)
但是您需要将环境变量设置OMP_CANCELLATION为true才能使其正常工作.
但是,您应该尽量避免这样做,因为取消费用很高.