以下の例では、マルチスレッド化アプリケーションにおいてファイル入出力の推奨使用パターンから 逸脱した際の明示的シリアライゼーション・ロジックの必要性について説明します。また、これらの例では、シリアライゼーションを適切に処理できない結果として発生する予期しない動作についても説明します。
それぞれの例において、サンプル操作を含むプログラムの 2 つのインスタンスが 1 つの実行単位内で、2 つの異なるスレッド上で実行されています。
READ F1 . . . REWRITE R1
上記の例で、2 番目のスレッドは、最初のスレッド上で READ ステートメントが実行された後に (ただし、最初のスレッド上で REWRITE ステートメントが実行される前に) READ ステートメントを実行すると考えられます。REWRITE ステートメントは、意図したレコードの更新は行わない可能性があります。目的の結果が確実に出るようにするには、明示的シリアライゼーション・ロジックを書き込みます。
READ F1 . . . * Process the data in the FD record description entry for F1 . . .
上記の例で、2 番目のスレッドは、最初のスレッドが FD レコード記述項目内のレコードをまだ処理中に READ ステートメントを実行すると考えられます。 2 番目の READ ステートメントは、最初のスレッドが処理中であるレコードをオーバーレイする可能性があります。 この問題を回避するには、次の推奨技法を使用してください。
READ F1 INTO LOCAL-STORAGE-item
その他のケース: 後に READ NEXT が続く START や、後に DELETE が続く READ など、一連の関連した入出力操作を必要とするその他の使用パターンについても同様に考慮してください。適切な手順を 実行して、ファイル入出力の正しい処理を確実に行います。