再入可能プログラム

REENTRANT コンパイラ指令を指定してコンパイルすると、マルチスレッド プログラムを再入可能なプログラムに設定できます。マルチスレッド アプリケーションでは、ほとんどの (すべてではない) モジュールに対して、再入可能なプログラムを使用してください。

REENTRANT(1) を指定した場合には、コンパイラが生成したすべての一時作業領域はそれぞれのスレッドに割り当てられます。環境部とデータ部に割り当てられたすべてのユーザー データ領域と FD ファイル領域は、すべてのスレッドで共有されます。プログラマは、CBL_ 同期呼び出しを使用して、プログラムのデータを確実にシリアル化する必要があります。

REENTRANT(2) を指定した場合は、システム作業領域の他に、作業場所節とファイル節のすべてのデータはそれぞれのスレッドに割り当てられます。局所記憶域は、スタック上に動的に割り当てられます。この割り当てにより、これらの領域での競合が回避されるため、複数のスレッドから同時に呼び出された場合でもプログラムは問題なく動作します。プログラムのロックまたはロック解放は必要ありません。このコンパイラ指令設定の欠点は、スレッド間でデータを共有しないことです (EXTERNAL で定義されたデータを除く)。

REENTRANT(2) は、プログラムをマルチスレッド アプリケーションで素早く、簡単に動作させる方法です。ただし、通常は REENTRANT(1) を使用してコンパイルしてください。

再入可能なプログラムでは、その作業場所節とファイル節内のデータ項目で起こる可能性があるすべての競合を解決する必要があります。1 つ以上の技法を使用して、データ競合を解決する必要があります。詳細については、次を参照してください。