シリアル属性をもつプログラムでは、システム作業領域は静的に割り当てられます。プログラムは開始時にロックされ、終了時にロック解放されます。
このことにより、ある時点で 1 つのスレッドだけがプログラムを実行するようになるため、システムまたはユーザーの作業領域での競合がなくなります。他の明示的なアプリケーション ロジックは必要ありません。
コンパイル時に SERIAL コンパイラ指令を指定すると、プログラムにシリアル属性を与えることができます。
通常の COBOL プログラムをシリアル プログラムとして指定すると、プログラムのソースコードを変更しないでマルチスレッド アプリケーションにインクルードできます。
一方、シリアル プログラムの欠点は次のとおりです。
- マルチスレッドのレベルが、アプリケーション内で制限されます。マルチスレッド アプリケーションでは、理想的には最大性能を発揮するために可能な限り多くのコードを無制限に実行できることが必要となります。
- プログラムには、ロックおよびロック解放処理に多くのランタイム コストがかかります。このランタイム コストは呼び出しの処理速度とアプリケーション全体の性能に大きく影響します。そのため、このコンパイラ指令でコンパイルするモジュール数を可能な限り少なくし、呼び出されるプログラムには必ず非マルチスレッド属性を設定する必要があります。例えば、プログラム A が、シリアル属性でコンパイルされ、かつアプリケーション内でプログラム B と C を呼び出す唯一のプログラムである場合、アプリケーションの設計により、プログラム B と C は既にシリアル化されているので、非マルチスレッド属性でコンパイルしておいて良いのです
。