2.7.2 データ共有属性句
ユーザーが領域の実行中に変数の共有属性を制御できる句を使用可能なディレクティブが存在します。共有属性句は、その句が設定されるディレクティブの構文範囲内の変数にのみ適用されます。以下に示すすべての句がすべてのディレクティブで使用できるわけではありません。特定のディレクティブで使用できる句の一覧は、そのディレクティブのセクションに示されています。
parallel コンストラクトまたは work-sharing コンストラクトが検出されたときに参照できる変数があり、その変数が共有属性句または threadprivate ディレクティブで指定されていない場合、変数は共有されます。並列領域の動的範囲内で宣言される静的変数は共有されます。ヒープ割り当てメモリ (たとえば C または C++ で malloc() を使用する場合、または C++ で new 演算子を使用する場合) は共有されます。ただし、このメモリへのポインタは、プライベートにも共有にもできます。並列領域の動的範囲内で宣言された自動ストレージ存続期間を持つ変数はプライベートです。
これらの句のほとんどが、可視変数のコンマ区切りリスト variable-list 引数を受け入れます。データ共有属性句で参照される変数がテンプレートから派生した型で、プログラム内にその変数への参照が他にない場合、その動作は未定義です。
ディレクティブ句内に現れるすべての変数は参照できることが必要です。句は必要に応じて繰り返すことができますが、1 つの変数を複数の句に指定することはできません。ただし、同じ変数を firstprivate 句と lastprivate 句の両方に指定することはできます。
以下のセクションで、データ共有属性句について説明します。
private (25 ページの「2.7.2.1 private」)
firstprivate (26 ページの「2.7.2.2 firstprivate」)
lastprivate (27 ページの「2.7.2.3 lastprivate」)
shared (27 ページの「2.7.2.4 shared」)
default (28 ページの「2.7.2.5 default」)
reduction (28 ページの「2.7.2.6 reduction」)
copyin (31 ページの「2.7.2.7 copyin」)
copyprivate (32 ページの「2.7.2.8 copyprivate」)