インテル® C++ コンパイラー 14.0 ユーザー・リファレンス・ガイド
スレッドから見たメモリーの状態と実際のメモリーの整合性が保たれるポイントを識別します。
状況によっては、スレッドはマシンレジスターにデータをロードするなどして、特定のメモリー位置のプライベート・ビューを保持します。 このプラグマは、プラグマを指定した位置で、このスレッドによって書き込まれた指定リストにある変数をプライベート・ビューからメモリーにフラッシュします。 次回、このスレッドによる指定リストにある変数の読み取りは、スレッドのプライベート・ビューではなく、メモリーから行われます。
リストを指定しない場合、この操作はスレッドから見えるすべての変数に適用されます。
次の例は、このプラグマを利用して、並列実行で最大 1 つの保護セクションを実行する方法を示します。
#include <omp.h>
int a,b,tmp;
a = b = 0;
#pragma omp parallel num_threads(2)
{
if (omp_get_thread_num() == 0) {
#pragma omp atomic
b = 1;
#pragma omp flush (a,b)
#pragma omp atomic
tmp = a;
if (tmp == 0) {
// 保護セクション 1
}
}
if (omp_get_thread_num() == 1) {
#pragma omp atomic
a = 1;
#pragma omp flush (a,b)
#pragma omp atomic
tmp = b;
if (tmp == 0) {
// 保護セクション 2
}
}
}