任务控制
CICS® 任务控制设施提供用于同步任务活动或控制资源使用的功能。
Java 和 C++
此处描述的应用程序编程接口是 EXEC CICS API ,该 API 未在 Java™ 程序中使用。 有关使用 JCICS 类访问任务控制服务 CICS的 Java 程序的信息,请参阅 使用 JCICS 进行 Java 开发 和 JCICS Javadoc 文档。 有关使用 CICS C++ 类的 C++ 程序的信息,请参阅 使用 CICS 基础类。
CICS 根据 CICS 系统程序员设置的值来分配优先级。 当 CICS 或应用程序无法完成进一步的工作时,将对处理器的控制授予准备好处理的最高优先级任务,并将其返回到操作系统。
- 暂挂任务 (SUSPEND 命令) 以允许优先级较高的任务继续执行。 这可以防止处理器密集型任务垄断处理器。 当其他符合条件的任务已继续并终止或暂挂处理时,控制权将返回给发出任务; 即,该任务仍可分派。
- 调度任务使用资源 (ENQ 和 DEQ 命令)。 这有时有助于保护资源不被多个任务并发使用; 即,使该资源可串行复用。 要使用资源的每个任务都会发出入队命令 (ENQ)。 执行此操作的第一个任务是立即使用资源,但如果未发出 HANDLE CONDITION ENQBUSY 命令,那么其他任务发出的针对该资源的后续 ENQ 命令将导致这些任务暂挂,直到该资源可用为止。
如果在 ENQ 命令上编码了 NOSUSPEND 选项,那么控制权将始终返回到程序中的下一个指令。 通过检查 EIBRESP 字段的内容,您可以查看 ENQ 命令是否成功。
使用资源的每个任务都应该在完成后发出出队命令 (DEQ)。 但是,当使用入队/出队机制时,无法保证发出 ENQ 和 DEQ 命令的两个或多个任务在给定序列中相对于彼此发出这些命令。 有关控制访问顺序的方法,请参阅 控制对资源的访问顺序。
- 更改分配给任务的优先级 (CHANGE TASK PRIORITY 命令)。
- 等待完成后发布 MVS™ 格式的 ECB 的事件。
有两个命令可用 :WAITCICS 和 WAIT EXTERNAL。 这些命令会导致发出任务暂挂,直到发布了其中一个 ECB; 即,直到发生其中一个事件为止。 该任务可以在一个或多个 ECB 上等待。 如果它在多个 ECB 上等待,那么只要发布其中一个 ECB ,就可对其进行分派。 您必须确保每个 ECB 的清除时间 (设置为二进制零) 不晚于可发布的最早时间。 CICS 无法为您执行此操作。 如果您在先前发布且随后未清除的 ECB 上等待,那么任务不会暂挂并继续运行,就像未发出 WAITCICS 或 WAIT EXTERNAL 一样。
WAIT EXTERNAL 通常开销较小,但必须始终使用 MVS POST 工具或通过优化后 (使用比较和交换 (CS) 指令) 发布关联的 ECB。 绝不能用任何其他方法发布这些信息。 如果您对发布方法有任何疑问,请使用 WAITCICS 命令。 处理通过 WAIT EXTERNAL 命令传递的 ECB 时, CICS 会扩展这些 ECB 并使用 MVS POST 出口工具。 给定的 ECB 不得同时等待多个任务 (或在一个任务的 ECBLIST 中出现两次)。 未能遵循此规则将导致 INVREQ 响应。
如果要通过 MVS POST 工具以外的任何方法或通过优化后的发布来发布 ECB ,那么必须使用 WAITCICS。 例如,如果应用程序通过将值移动到 ECB 中来发布 ECB ,那么必须使用 WAITCICS。 (WAITCICS 命令还可用于使用 MVS POST 工具或优化后发布的 ECB。) 每当 CICS 进入 MVS WAIT 时,它都会将发出 WAITCICS 命令的任务正在等待的所有 ECB 的列表传递给 MVS。 CICS 在 MVS WAIT 上传递的 ECBLIST 包含重复的地址,并且 MVS 异常终止 CICS。
如果使用 MVS POST , WAIT EXTERNAL , WAITCICS , ENQ 或 DEQ 命令,那么可以创建会对您执行动态事务路由的能力产生负面影响的事务间亲缘关系。
为了帮助您确定发出此命令的程序的潜在问题,可以使用 CICS Interdependency Analyzer。 有关此实用程序和 亲缘关系 的更多信息,请参阅 CICS Interdependency Analyzer for z/OS 。