我想知道REXX语言的一个方面,它如何处理数据集锁。 情况: - 我在ISPF编辑器中打开了顺序数据集 - 我启动REXX程序更新(更改)该数据集 - 它工作正常,但它是如何可能的?通常,如果您在编辑器中打开了数据集 并且您尝试使用来自其他程序的程序(例如,如果您提交某个作业),您将收到消息“数据集正在使用中”。 为什么这适用于REXX。也许是相同的地址空间或......? 有人能告诉我吗?
答案 0 :(得分:4)
REXX无法管理数据集锁定。 REXX调用服务模块 分配数据集并对它们执行I / O. I / O服务 TSO下的例行程序称为EXECIO。在EXECIO可以对数据集进行操作之前,它必须 在TSO下分配给某个DDName。然后在EXECIO请求中引用此DDName。
数据集可以直接从TSO命令提示符或从 在您的REXX执行官内部。数据集锁定级别由DISPosition参数确定 在数据集分配期间提供。
在您的特定示例中,重点是您正在运行ISPF编辑 会话和相同的 TSO会话下的REXX exec。数据集内的分配 相同的TSO会话不会相互阻塞。 DISP参数指定如何锁定 尊重其他进程,而不是进程本身。因此永远不会 是在同一个TSO会话下运行的不同程序之间的数据集锁定问题。
ISPF编辑器启动的“正在使用的数据集”消息是该函数的函数 编辑器本身检查先前的分配 在同一个TSO会议下。
尝试以下实验:
重复您所描述的内容:在数据集上打开ISPF编辑会话。然后 在相同的TSO会话下运行REXX proc以更新它。应该毫无怨言地工作。
下一步:请朋友在数据集上打开ISPF编辑会话。这次你的REXX proc会 由于“使用中的数据集”而爆炸。你可以自己做同样的事情 通过在TSO中编辑数据集并将REXX exec作为批处理作业提交到您的帐户下。 交互式TSO会话是一个进程,批处理TSO会话是第二个进程和 数据集锁定将在它们之间发生(您的批处理作业将爆炸或将挂起,直到TSO编辑会话被放弃)。
数据集访问冲突仅在不同进程尝试时显示 使用不兼容的DISP参数分配相同的数据集。