簡略化された例を考えてみましょう。私は、以下の機能を持っていることを言う:ompを使用して並列に参照を使用する関数
int foo(int x, int y, bool &flag) {
if (x == y)
flag = true;
return x + y;
}
、その後のOpenMPを使用して並列に実行される:
bool flag = false;
#pragma omp parallel for
for (int i = 0; i < n; i++) {
z[i] = foo(x[i], y[i], flag);
}
私はここでの問題は、関数が並列し、それぞれで複数回呼び出されるということであることを推測しますのインスタンスは、同じflag
を指しています。どのような簡単な解決法を使ってこれを修正するのが最善の方法ですか?
免責事項:例外が発生した場合フラグ:私は多くの人々がこのような方法で参照を使用することが悪いですが、私の場合には、それは、タスクを達成するための最も簡単な方法であると言うだろうとを知って。
参照は問題ではありません。問題はデータ競争です。たとえコードがインラインで書かれていても、それを得ることができます。 – StoryTeller
@StoryTeller私は名前を知らなかったが、これはまさに私が意味していたものです。 – Tim