スレッド ハンドル

一般に、ランタイム システムはスレッド ハンドルでスレッドを識別します。スレッド ハンドルは、次のモジュールとスレッドで使用します。

スレッド ハンドルは、各種のマルチスレッド COBOL 文または CBL_THREAD_n ルーチンに対して、一意にスレッドを識別します。十分に注意を払えば、作成スレッドだけでなく、実行単位に含まれるアクティブなスレッドでもスレッド ハンドルを使用することができます。スレッドの存在期間とそのスレッド ハンドルの存在期間は、必ずしも同じではないことを覚えておいてください。スレッドの作成方法やスレッドに対する処理によっては、スレッドが終了してもそのスレッド ハンドルがまだ有効な場合があります。システムがそのハンドルに関連付けられたリソースを回復するために、スレッドのハンドルを明示的にデタッチするかどうかはユーザーが判断します。

スレッドからハンドルをデタッチする方法はいくつかあります。スレッドが START 文または CBL_THREAD_CREATE ルーチンで作成された場合は、そのハンドルはデフォルトで、切り離された状態で作成さます。また、他言語で作成したスレッドがランタイム システムで認識されると、作成されるハンドルは常に自動的にデタッチされます。切り離されていないハンドルは、CBL_THREAD_DETACH 呼び出しで切り離すことができます。切り離されたハンドルはスレッドの終了直後に無効となるため、どの場合でもそのハンドルを、常に注意深く使用する必要があります。ハンドルがデタッチされていないスレッドがすでに終了している場合には、そのスレッド ハンドルで CBL_THREAD_DETACH を呼び出すと、ただちにそのハンドルは無効になります。

切り離されていないハンドルは、(WAIT 文または CBL_THREAD_WAIT ルーチンを通しての) 戻り値の取出しや、(CBL_THREAD_IDDATA_GET ルーチンを通しての) 終了している可能性のあるスレッドのスレッド識別データの検査にも便利です。START 文を指定すると、デタッチされていないスレッド ハンドルを戻し、新規作成されたスレッドを識別できます。CBL_THREAD_CREATE ルーチンは、スレッドを作成し、切り離されていないハンドルが返されることを示すフラグを提供します。