task 指令は、タスクのデータ環境を定義する次のデータ属性節を取ります。
default (private | firstprivate | shared | none)
private (list )
firstprivate (list )
shared (list )
shared 節にリスト指定された変数へのタスク中のすべての参照は、 task 指令の直前に存在する同じ名前の変数を参照します。
private および firstprivate 変数のそれぞれに対し、新しいストレージが作成され、task コンストラクトの字句エクステントにある元の変数へのすべての参照は、新しいストレージへの参照に置き換えられます。firstprivate 変数は、タスクが検出された時点の元の変数値で初期化されます。
task コンストラクトのデータ属性節にはリストされておらず、また OpenMP のルールに沿った事前定義が行われていない変数のデータ共有属性は、暗黙的に次のように定義されます。
(a) task コンストラクトに default 節がない場合は、その変数が属するすべてのコンストラクト (それを含む最も内側の並列構文までを含む) で共有される設定になった変数は、shared となります。
(b) task コンストラクトに default 節がない場合、ルール (a) によるデータ共有属性の決定が行われなかった変数は、firstprivate となります。
また、
(a) task コンストラクトが字句的に parallel コンストラクトに含まれる場合、task コンストラクトを含むすべてのスコープで共有される変数は、生成されたタスクでも共有されたままになります。それ以外の場合は、変数は暗黙的に firstprivate となります。
(b) task コンストラクトが孤立している場合は、変数は暗黙的に firstprivate となります。