我有这样的功能
void foo(x, *y) {
some calculations
if (x > *y) {
*y = x/2;
}
more calculations
}
我的平行部分是
int x[] = some array;
double y=0;
#pragma omp parallel for
for ( int i = 0; i<=n; i++) {
do something
for ( int j = 0; j<=n; j++) {
foo(x[i], &y);
}
如果我将 if 语句重写为
*y = x > *y ? x/2 : *y;
我可以
#pragma omp critical
*y = x > *y ? x/2 : *y;
但我不想更改代码。如何为条件 y-update 块创建临界区?