REXX言語で、データセットのロックをどのように処理するのか疑問に思っています。状況:-ISPFエディターで順次データ・セットを開いています-REXXを開始します-そのデータ・セットを更新(変更)するプログラムを作成します-正常に動作しますが、どのように可能ですか?通常、エディターでデータセットを開いていて、それを別のプログラムから使用しようとすると(たとえば、ジョブを送信する場合)、「データセットは使用中です」というメッセージが表示されます。ここでこれがREXXで機能する理由。たぶん同じアドレス空間か...?誰か教えてもらえますか?
1 に答える
REXX はデータセットのロックを管理しません。REXX はサービス モジュールを呼び出して、データセットを割り当て、それらに対して I/O を実行します。TSO の下の I/O サービス ルーチンは、EXECIO と呼ばれます。EXECIO がデータセットで操作できるようにするには、TSO の下で DDName に割り当てる必要があります。この DDName は、EXECIO 要求で参照されます。
データセットは、TSO コマンド プロンプトから、または REXX exec 内から直接割り当てることができます。データセットのロック レベルは、データセットの割り当て中に指定された DISPosition パラメータによって決定されます。
特定の例で取り上げる重要な点は、ISPF 編集セッションと REXX exec を同じTSO セッションで実行していることです。同じ TSO セッション内のデータセット割り当ては、互いにブロックしません。DISP パラメータは、プロセス自体ではなく、他のプロセスに関してロックする方法を指定します。したがって、同じ TSO セッションで実行されている異なるプログラム間でデータセットのロックの問題が発生することはありません。
ISPF エディターによってポップアップされる「Dataset in use」メッセージは、同じ TSO セッションでの以前の割り振りをチェックするエディター自体の機能です。
次の実験を試してください。
説明したことを繰り返します。データセットで ISPF 編集セッションを開きます。次に、同じ TSO セッションで REXX proc を実行して更新します。不満なく動作するはずです。
次へ: 友人に、データセットで ISPF 編集セッションを開くように依頼します。今回は、「使用中のデータセット」のために REXX proc が爆発します。TSO でデータセットを編集し、自分のアカウントで REXX exec をバッチ ジョブとしてサブミットすることで、同じことを自分で行うことができます。対話型 TSO セッションは 1 つのプロセスであり、バッチ TSO セッションは 2 番目のプロセスであり、それらの間でデータセットのロックが発生します (バッチ ジョブは失敗するか、TSO Edit セッションが破棄されるまでハングします)。
データセット アクセスの競合は、異なるプロセスが互換性のない DISP パラメーターを使用して同じデータセットを割り当てようとした場合にのみ発生します。