次の方法で共有


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

参照

概念

OpenMP ディレクティブ