我想知道REXX语言的一件事,它是如何处理数据集锁的。情况:-我在我的ISPF编辑器中打开了顺序数据集--我启动了REXX程序--对数据集进行更新(更改)--它工作得很好,但是它是如何实现的呢?通常,如果您在编辑器中打开了数据集,并且尝试使用来自另一个程序的数据集(例如,如果您提交了某个职务),您将得到“使用中的数据集”消息。为什么这和这里的REXX一起工作。也许是同一个地址空间还是.?有人能告诉我吗?
发布于 2010-08-26 16:37:12
REXX不管理数据集锁定。REXX调用服务模块来分配数据集并对它们执行I/O。TSO下的I/O服务例程称为EXECIO。在EXECIO能够对数据集进行操作之前,它必须在TSO下分配给某些DDName。然后在EXECIO请求中引用此DDName。
数据集可以直接从TSO命令提示符或从REXX内部分配。数据集锁定级别由数据集分配期间提供的DISPosition参数确定。
在您的特定示例中需要注意的一点是,您正在同一TSO会话下运行ISPF编辑会话和REXX exec。同一TSO会话中的数据集分配不会彼此阻塞。DISP参数指定如何锁定其他进程,而不是进程本身。因此,在同一TSO会话下运行的不同程序之间永远不会出现数据集锁定问题。
ISPF编辑器弹出的“使用中的数据集”消息是编辑器本身在同一TSO会话下检查先前分配的功能。
尝试以下实验:
重复您描述的内容:在dataset上打开ISPF编辑会话。然后在同一个TSO会话下运行您的REXX来更新它。应该毫无怨言地工作。
接下来:让朋友在dataset上打开ISPF编辑会话。这一次,您的REXX会因为“使用中的数据集”而崩溃。通过编辑TSO中的dataset并将REXX作为批处理作业提交到您的帐户下,您也可以自己做同样的事情。交互式TSO会话是一个进程,批处理TSO会话是第二个进程,它们之间将发生数据集锁定(您的批处理作业将爆炸或挂起,直到TSO编辑会话被放弃)。
只有当不同进程试图使用不兼容的DISP参数分配同一数据集时,才会显示数据集访问冲突。
https://stackoverflow.com/questions/3564920
复制相似问题