2010-08-25 29 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