3

我想知道 REXX 语言的一件事,它如何处理数据集锁。情况: - 我在我的 ISPF 编辑器中打开了顺序数据集 - 我启动 REXX-program 什么更新(进行更改)该数据集 - 它工作正常,但它怎么可能?通常,如果您在编辑器中打开了数据集,并且您尝试从另一个程序中使用它(例如,如果您提交一些工作),您将收到消息“数据集正在使用中”。为什么这适用于 REXX 此处。也许相同的地址空间或...?谁能告诉我?

4

1 回答 1

4

REXX 不管理数据集锁定。REXX 调用服务模块来分配数据集并在它们上执行 I/O。TSO 下的 I/O 服务例程称为 EXECIO。在 EXECIO 可以对数据集进行操作之前,它必须在 TSO 下分配给某个 DDName。然后在 EXECIO 请求中引用此 DDName。

数据集可以直接从 TSO 命令提示符或从您的 REXX 执行程序内部分配。数据集锁定级别由数据集分配期间提供的 DISPosition 参数确定。

在您的特定示例中要了解的重要一点是,您正在同一TSO 会话下运行 ISPF 编辑会话和 REXX 执行程序。同一 TSO 会话中的数据集分配不会相互阻塞。DISP 参数指定如何锁定其他进程,而不是进程本身。因此,在同一 TSO 会话下运行的不同程序之间永远不会出现数据集锁定问题。

ISPF 编辑器弹出的“正在使用的数据集”消息是编辑器本身检查同一 TSO 会话下的先前分配的功能。

尝试以下实验:

重复您描述的内容:在数据集上打开 ISPF 编辑会话。然后在同一 TSO 会话下运行您的 REXX proc 以更新它。应该毫无怨言地工作。

下一步:请朋友在数据集上打开 ISPF 编辑会话。这次你的 REXX proc 会因为“正在使用的数据集”而崩溃。您可以自己做同样的事情,方法是在 TSO 中编辑数据集并将 REXX exec 作为批处理作业提交到您的帐户下。交互式 TSO 会话是一个进程,批处理 TSO 会话是第二个进程,并且它们之间将发生数据集锁定(您的批处理作业将崩溃或挂起,直到放弃 TSO 编辑会话)。

数据集访问冲突仅在不同进程尝试分配具有不兼容 DISP 参数的同一数据集时才会出现。

于 2010-08-26T16:37:12.803 回答