26.8.2 スレッドごとに環境変数を設定する機能
マルチスレッド対応COBOLプログラムでは,環境変数へのアクセス機能を使えば,スレッドごとに環境変数の値を設定・取得できます。環境変数へのアクセス機能の詳細については,「10.4 環境変数へのアクセス」を参照してください。
- 規則
-
-
環境変数の値を設定・変更した場合,その値は実行スレッド内だけで有効となります。
-
同一の環境変数に対して,スレッドごとに別々の値を設定できます。
-
設定した環境変数は,COBOL以外のプログラムで使用できません。また,PATHなどのシステム環境変数や,COBOL2002以外が管理する環境変数の値を設定・変更しても有効になりません。
-
この機能を使って,「26.8.1 スレッドごとに固有の出力ファイル名称を付ける機能」で示した環境変数を設定した場合,この機能が優先され,出力ファイル名にスレッド識別子は付けられません。
マルチスレッド対応COBOLプログラムで環境変数へのアクセスを使用した場合,内部的に環境変数名にスレッド識別子の値を付けた環境変数名で値を登録および取得します。
スレッド識別子が1000で環境変数CBLABNLSTを設定する例を次に示します。
- (例)
-
マルチスレッド対応COBOLプログラムで,CBLABNLST=a.txtを設定したとき,次のように環境変数を登録および取得します。
-
スレッド識別子を付けた環境変数名を使用して,「CBLABNLST_1000=a.txt」を値に登録します。
-
マルチスレッド対応COBOLプログラムで,環境変数を取得する場合,次の順序で環境変数名をアクセスし,取得した値を返します。
1. スレッド識別子を付けた環境変数名(CBLABNLST_1000)
2. スレッド識別子を付けない環境変数名(CBLABNLST)
このため,環境変数の値をクリアしないでCOBOLプログラムの実行を終了し,あとで同じスレッド識別子のスレッドでCOBOLプログラムが動作した場合,そのスレッドで環境変数を設定していなくても,以前のスレッドで設定した環境変数の値が取得されます。
COBOLプログラムを終了する前にNULL(X'00')で始まる値を設定することで,スレッド識別子を付けた環境変数に対して値のない環境変数を設定できます※。
注※
値のない環境変数を設定したあとに環境変数へのアクセス機能で環境変数の値の読み込みを行った場合,COBOLはスレッド識別子を付けない環境変数名(CBLABNLST)にアクセスし,取得した値を返します。
-
-
- 注意事項
-
マルチスレッド環境下で動作するプログラムでは,環境変数の設定中に,ほかのスレッドで環境変数を設定または取得することは,OSで保証されていません。環境変数の設定中に,同時に別のスレッドで環境変数アクセス関数※の処理が実行された場合,環境変数アクセス関数がエラーリターンしたり,シグナルが発生したりすることでプログラムが異常終了することがあります。
DISPLAY文またはC言語プログラムで環境変数を設定する場合,環境変数アクセス関数がスレッド間で同時に実行されないようにしてください。
- 注※
-
putenv関数,またはgetenv関数