flush (OpenMP)
すべてのスレッドが、すべての共有オブジェクトに対して同じメモリ ビューを持つように指定します。
#pragma omp flush [(var)]
解説
指定項目
- var (省略可能)
同期をとるオブジェクトを表す変数のコンマ区切りリスト。var が指定されていない場合、すべてのメモリがフラッシュされます。
解説
flush ディレクティブは OpenMP 句をサポートしません。
詳細については、「2.6.5 flush ディレクティブ」を参照してください。
使用例
// omp_flush.cpp
// compile with: /openmp
#include <stdio.h>
#include <omp.h>
void read(int *data) {
printf_s("read data\n");
*data = 1;
}
void process(int *data) {
printf_s("process data\n");
(*data)++;
}
int main() {
int data;
int flag;
flag = 0;
#pragma omp parallel sections num_threads(2)
{
#pragma omp section
{
printf_s("Thread %d: ", omp_get_thread_num( ));
read(&data);
#pragma omp flush(data)
flag = 1;
#pragma omp flush(flag)
// Do more work.
}
#pragma omp section
{
while (!flag) {
#pragma omp flush(flag)
}
#pragma omp flush(data)
printf_s("Thread %d: ", omp_get_thread_num( ));
process(&data);
printf_s("data = %d\n", data);
}
}
}
Thread 0: read data
Thread 1: process data
data = 2