COBOL2002 使用の手引 手引編
マルチスレッドプログラムの実行を開始する方法には,次の三つがあります。
それぞれの開始方法と終了方法について説明します。
COBOLプログラム以外のプログラムを入り口としてスレッドを開始して,そのプログラムから間接的にマルチスレッド対応COBOLプログラムを呼び出せます。
この方法では,スレッド内で最初に呼ばれるCOBOLプログラムが,COBOL主プログラムの場合と,COBOL副プログラムの場合とで,プログラム終了時の動作が異なります。COBOL主プログラムと副プログラムについては,「18.3 COBOL主プログラムと副プログラム」を参照してください。
-MainNotCBLオプションを指定しないでコンパイルしたプログラムがスレッド内で最初に実行された場合,COBOL主プログラムになります。
COBOL主プログラムを終了させるには,STOP RUN文を実行します。これによって,COBOL実行環境が終了し,スレッドが終了されます。このとき,RETURN-CODE特殊レジスタの値がスレッドの終了コードになります。
-MainNotCBLオプションを指定してコンパイルしたプログラムは,スレッド内で最初に実行した場合でも,常にCOBOL副プログラムとなります。
COBOL副プログラムは,呼び出し元のプログラムに復帰できます。このとき,COBOL実行環境は保持されます。そのため,呼び出し元のプログラムは,スレッドが終了する前にCOBOL実行環境を終了させる必要があります。COBOL実行環境を終了させるには,CBLENDサービスルーチンを呼び出します。
図26-1 COBOL以外のプログラムからの呼び出しの例
マルチスレッド対応COBOLプログラムを入り口としてスレッドを開始した場合,このプログラムが終了したときにCOBOL実行環境を終了し,スレッドが終了します。このとき,RETURN-CODE特殊レジスタに指定した値が,スレッドの終了コードになります。
図26-2 COBOLプログラムがスレッド開始関数となる例
マルチスレッド対応COBOLプログラムに対して,-Main,Systemまたは-Main,V3オプションを指定してコンパイルしたCOBOLプログラムは,アプリケーションの主プログラムになります。この場合,COBOLプログラムがプライマリスレッドになります。
マルチスレッド対応COBOLプログラムがアプリケーションの主プログラムである場合,マルチスレッド対応COBOLプログラムが終了したときに,プライマリスレッドが終了し,プロセスも終了します。
なお,コンパイル時に例外を検知するオプション(-DebugInfオプションなど)を指定した場合,プライマリスレッド内で発生した例外を取得できます。
上記(1)〜(3)の方法について,戻り文に対する動作の違いを,次に示します。
COBOLプログラムの種類 | STOP RUN文 | GOBACK文 | EXIT PROGRAM文 |
---|---|---|---|
COBOL主プログラム | STOP RUN文を実行したスレッドが終了する。 | GOBACK文を実行したスレッドが終了する。 | 何も動作しない。 |
COBOL副プログラム | STOP RUN文を実行したスレッドが終了する。 | 呼び出し元に制御が戻る。 | 呼び出し元に制御が戻る。 |
All Rights Reserved. Copyright (C) 2014, 2017, Hitachi, Ltd.