インテル® C++ コンパイラー 15.0 ユーザー・リファレンス・ガイド
スレッドから見たメモリーの状態と実際のメモリーの整合性が保たれるポイントを識別します。
#pragma omp flush [list] |
list |
フラッシュする変数をカンマで区切って指定。 |
状況によっては、スレッドはマシンレジスターにデータをロードするなどして、特定のメモリー位置のプライベート・ビューを保持します。 このプラグマは、プラグマを指定した位置で、このスレッドによって書き込まれた指定リストにある変数をプライベート・ビューからメモリーにフラッシュします。 次回、このスレッドによる指定リストにある変数の読み取りは、スレッドのプライベート・ビューではなく、メモリーから行われます。
リストを指定しない場合、この操作はスレッドから見えるすべての変数に適用されます。
並列実行で最大 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 } } } |
次の例は、このプラグマを利用して、並列実行で最大 1 つの保護セクションを実行する方法を示します。