SERIALIZE

SERIALIZE キーワードを並行スレッド・モジュールで指定すると、プロシージャーでスレッドを常に 1 つだけ実行することができます。 あるスレッドがプロシージャーで実行されているときに、他のスレッドがそのプロシージャーを呼び出した場合、最初のスレッドがプロシージャーで実行されなくなるまで、2 番目のスレッドはプロシージャーの実行を待機します。 あるスレッドがプロシージャーで実行されているときに、そのプロシージャーに対する再帰呼び出しが実行された場合、そのスレッドがプロシージャーに対するすべての再帰呼び出しから戻らない限り、別のスレッドがそのプロシージャーで実行されることはありません。

制御仕様書で THREAD(*CONCURRENT) が指定されている場合にのみ、SERIALIZE キーワードを使用することができます。

あるプロシージャーに対して SERIALIZE を指定することは、制御仕様書で THREAD(*SERIALIZE) を指定することに似ています。 ただし、異なる点もあります。 制御仕様書で THREAD(*SERIALIZE) を指定した場合は、複数のスレッドからモジュール内のすべてのプロシージャーに対するアクセスが制限されるのに対し、SERIALIZE キーワードをプロシージャーに指定した場合は、そのプロシージャーへのアクセスのみが制限されます。

SERIALIZE キーワードが指定された複数のプロシージャーが、あるモジュール内に存在する場合、それらのプロシージャーは独立して実行されます。 逐次化されたプロシージャーでスレッドを実行しながら、同じモジュール内の別の逐次化されたプロシージャーで別のスレッドを実行することができます。 例えば、同じモジュール内のプロシージャー PROCA と PROCB の両方に SERIALIZE キーワードが指定されている場合、あるスレッドで PROCA で実行しながら別のスレッドで PROCB を実行することができます。 逐次化プロシージャーの使用方法の詳細については、THREAD(*CONCURRENT | *SERIALIZE)を参照してください。