サポートチーム便り2011.11.24
マルチスレッド化の危険性
Question
ソースにアクセスできない場合に、ある RPG IV プログラムが thread(*serialize) または thread(*concurrent) で作成されたか、あるいはそのどちらで作成されたのでもないかを判断するにはどのコマンドを使用したらよいでしょうか。
Answer
dspmod detail(*import) コマンドで判断できますが、この技法は文書化されておらず、リリースごとに変わる可能性があります。マルチスレッド環境で動作している RPG モジュールを信頼することはお奨めしません。Thread(*serialize) はデッドロックを発生させる危険性があり、thread(*concurrent) の場合は、RPG コンパイラーで同期がサポートされていません。
thread(*serialize) を使用するとモジュール・レベルでシリアライズされるため、このモジュールのマルチスレッド化が失われます。Thread(*concurrent) は各スレッドの静的ストレージを完全にコピーしますが、同期を行う際に共有メモリーを使用するのが多少面倒になります。