複数のスレッドでの同時実行
THREAD(*CONCURRENT) を指定する場合、2 つ以上のスレッドが同じモジュール、同じプロシージャー、または同じステートメントで異なるプロシージャーを実行できます。 2 つ以上のスレッドが同じモジュールまたは同じプロシージャーで実行されている場合、 それぞれデフォルトで、モジュールとそのプロシージャーに静的記憶域の独自のインスタンスを持ちます。この記憶域は、スレッド・ローカル記憶域と呼ばれます。 例えば、2 つのスレッドが以下のループで実行されている場合、 1 つのスレッドは、値 7 を持つ変数 "count" を使用して、ファイルの 20 番目のレコードを読み取った後、 "IF" ステートメントを処理することができます。 もう 1 つのスレッドは、値 1 を持つ変数 "count" を使用して、ファイルの 4 番目のレコードを読み取った後、 "READ" ステートメントを処理することができます。
read rec ds;
count = 0;
dow not %eof(file);
if (ds.amtOwing > ds.max.Owing);
handleAccount (ds);
count += 1;
endif;
read rec ds;
enddo;
STATIC(*ALLTHREAD) を使用して変数を定義することを選択した場合、 すべてのスレッドがその変数の同じインスタンスを使用します。
あるコードが一度に 1 つのスレッドによってのみ使用されるようにするには、 そのコードを逐次化プロシージャーに置くことができます (プロシージャー開始仕様書の SERIALIZE キーワード)。 逐次化された各プロシージャーには独自の逐次化メカニズムがあることに注意してください。 あるスレッドを逐次化された 1 つのプロシージャーで実行し、 別のスレッドを、同じモジュール内の逐次化された別のプロシージャーで実行することができます。
コードが一度に 1 つのスレッドによってのみ使用されるようにする他の方法は、 プロシージャー内のそのコードをスレッド逐次化モジュールに入れることです。