一部の COBOL アプリケーションは、サブシステムまたは他のアプリケーションに依存します。マルチスレッド化環境において、これらの依存性などに起因して、COBOL プログラムに対するいくつかの制限が発生します。
一般的に、実行単位内のアプリケーションに可視であるリソースへのアクセスを同期化する必要があります。この要件の例外には、DISPLAY および ACCEPT が あります。これらは複数のスレッドから使用でき、また推奨使用パターンを持つサポート対象の COBOL ファイル 入出力ステートメントからも使用できます。これらに対する同期化は、すべてランタイム環境によって提供されます。
CICS: マルチスレッド化 アプリケーションは CICS 環境において実行することはできません。CICS 環境では、THREAD オプションを使用してコンパイルし、複数の スレッドまたは PL/I タスクを持たないアプリケーションの一部である COBOL プログラムを実行できます。
再帰的: マルチスレッド化アプリケーション内のプログラムは再帰的プログラムとしてコーディングする必要があります。したがって、ネストされたプログラムをコーディングしないなど、再帰的プログラムに適用される制限やプログラミング上の考慮事項を 忠実に守る必要があります。
再入可能性: マルチスレッド化プログラムは、RENT コンパイラー・オプションを使用してコンパイルし、それらをバインダーまたはリンケージ・エディターの RENT オプションとリンクしなければなりません。
POSIX および PL/I: マルチスレッド化アプリケーションで POSIX スレッドを使用する場合には、言語環境プログラム・ランタイム・オプション POSIX(ON) を指定しなければなりません。アプリケーションが PL/I タスキングを 使用する場合には、POSIX(OFF) を指定しなければなりません。POSIX スレッドと PL/I タスクを同一のアプリケーションに混在させることはできません。
PL/I タスク: 複数の PL/I タスクを含むアプリケーションに COBOL プログラムを組み込む場合の指針を以下に示します。
C および言語環境プログラム対応アセンブラー: マルチスレッド COBOL プログラムは、C プログラムおよび言語環境プログラム対応アセンブラー・プログラムがマルチスレッド実行用に適切にコーディングされている場合、同じ実行単位内でそれらのプログラムと結合することができます。
AMODE: マルチスレッド化アプリケーションを AMODE 31 で実行しなければなりません。AMODE 24 を 複数のスレッドまたは PL/I タスクを持たないアプリケーションの一部として、THREAD オプションでコンパイルした COBOL プログラムを実行することができます。
非同期シグナル: スレッド化アプリケーションに おいて、COBOL プログラムは、非同期シグナルまたは割り込みによって割り込まれる場合があります。プログラムに そのような割り込みを容認できないロジックが含まれている場合には、そのロジックが継続する間はそうした割り込みを 使用不可にする必要があります。C/C++ 関数を呼び出して、シグナル・マスクを適切に設定します。
古い COBOL プログラム: マルチスレッド化 アプリケーションの複数のスレッド上で COBOL プログラムを実行するには、それらを Enterprise COBOL でコンパイルし、THREAD オプションを使用する必要があります。古いコンパイラーでコンパイルしたプログラムを 実行する場合には、以下の制限を守る必要があります
IGZBRDGE、IGZETUN、および IGZEOPT: 静的呼び出しを 動的呼び出しに変換するためのマクロである IGZBRDGE を、THREAD オプションで コンパイルしたプログラムと併用してはなりません。このマクロはサポートされません。 THREAD オプションで メインプログラムをコンパイルした、アプリケーションに対して、モジュール IGZETUN (ストレージ・チューニング用) または IGZEOPT (ランタイム・オプション用) を使用してはなりません。これらの CSECT は無視されます。
UPSI スレッド: アプリケーション内の すべてのプログラムおよびすべてのスレッドは UPSI スイッチの単一コピーを共用します。スレッド化アプリケーションでスイッチを 変更する場合には、適切なシリアライゼーション・ロジックをコーディングする必要があります。
関連タスク
再帰呼び出しの実行
マルチスレッド化によるファイル・アクセスのシリアライズ
XL C/C++ プログラミング・ガイド (z/OS UNIX システム・
サービス・アプリケーションでのスレッドの使用)
言語環境プログラム ILC (言語間通信) アプリケーションの作成