2010-08-25 30 views
2

我想知道REXX語言的一件事情,它如何處理數據集鎖。 The situation: - 我在我的ISPF編輯器中打開了順序數據集 - 我開始REXX程序對數據集 進行了哪些更新(進行了更改) - 它工作正常,但它有可能如何?通常情況下,如果您在編輯器 中打開了數據集,並且您嘗試使用其他程序中的數據集(例如,如果您提交了某個作業),則會收到消息「正在使用數據集」。 爲什麼這裏適用於REXX。也許相同的地址空間或...? 任何人都可以告訴我嗎?REXX/z/OS數據集鎖

回答

3

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編輯器強化的'正在使用的數據集'消息是 編輯器本身在相同TSO會話下檢查先前分配 的函數。

嘗試以下實驗:你所描述的

重複:在數據集上打開一個ISPF編輯會話。然後, 在相同的TSO會話下運行您的REXX proc以更新它。應該沒有投訴的工作。

下一步:請朋友打開數據集上的ISPF編輯會話。這次您的REXX proc將因爲「正在使用的數據集」而被炸燬。您可以通過編輯TSO中的數據集並將REXX exec作爲您的帳戶下的批處理作業提交給 來執行相同的操作。 交互式TSO會話是一個進程,批處理TSO會話是第二個進程,並且它們之間會發生數據集鎖定(您的批處理作業將爆炸或掛起直到放棄TSO編輯會話)。

只有當不同的進程嘗試使用 時,纔會顯示數據集訪問衝突,並分配具有不兼容的DISP參數的相同數據集。

+0

謝謝NealB, 「同一個TSO會話中的數據集分配不會彼此阻塞。」這解釋了一切!蒂莫,最好的問候 – Timo 2010-08-27 06:22:54