次の方法で共有


copyprivate

1 つ以上の変数がすべてのスレッドで共有されるように指定します。

copyprivate(var)

解説

指定項目

  • var
    共有する 1 つ以上の変数。 複数の変数を指定する場合、変数名間をコンマで区切ります。

解説

copyprivate は single ディレクティブに適用されます。

詳細については、「2.7.2.8 copyprivate」を参照してください。

使用例

// omp_copyprivate.cpp
// compile with: /openmp 
#include <stdio.h>
#include <omp.h>

float x, y, fGlobal = 1.0;
#pragma omp threadprivate(x, y)

float get_float() {
   fGlobal += 0.001;
   return fGlobal;
}

void use_float(float f, int t) {
   printf_s("Value = %f, thread = %d\n", f, t);
}

void CopyPrivate(float a, float b) {
   #pragma omp single copyprivate(a, b, x, y) 
   {
      a = get_float();
      b = get_float();
      x = get_float();
      y = get_float();
    }

   use_float(a, omp_get_thread_num());   
   use_float(b, omp_get_thread_num());   
   use_float(x, omp_get_thread_num());
   use_float(y, omp_get_thread_num());
}

int main() {
   float a = 9.99, b = 123.456;

   printf_s("call CopyPrivate from a single thread\n");
   CopyPrivate(9.99, 123.456);

   printf_s("call CopyPrivate from a parallel region\n");
   #pragma omp parallel     
   {
      CopyPrivate(a, b);
   }
}
  

参照

参照

OpenMP 句