线程安全程序
在 CICS ® 开放式事务环境 (OTE) 中,当向 CICS 定义应用程序,任务相关用户出口 (TRUE) ,全局用户出口程序和用户可替换模块作为线程安全模块时,它们可以在开放式 TCB 上同时运行。
访问 OTE
OTE 会自动涉及使用 ENABLE PROGRAM 命令上的 OPENAPI 选项启用 TRUE 的应用程序。 这些应用程序可以从线程安全中获得性能优势。 例如,访问 DB2 资源的 CICS 应用程序所使用的与 CICS DB2® 任务相关的用户出口是开放式 API TRUE ,因此 CICS DB2 应用程序可以从线程安全中获取性能优势。
对于其他用户应用程序, PLT 程序,用户可替换模块或与任务相关的用户出口,您可以选择使用 OTE ,方法是将它们定义为 OPENAPI 程序,在这种情况下,它们必须是线程安全的。
如果将程序定义为 CONCURRENCY (REQUIRED) ,那么它始终在开放式 TCB 上运行。 使用的开放式 TCB 类型取决于 API 设置。 对于 CICSAPI 程序, CICS 使用 L8 开放式 TCB ,而不考虑程序的执行键。 对于 OPENAPI 程序,如果设置了 EXECKEY (USER) ,那么 CICS 将使用 L9 TCB ,如果使用 EXECKEY (CICS) ,那么将使用 L8 TCB 设置。 REQUIRED 适用于用户应用程序, PLT 程序和用户可替换模块。 对于全局用户出口程序和与任务相关的用户出口程序,如果指定 CONCURRENCY (REQUIRED) ,那么 CICS 会将该程序视为已指定 CONCURRENCY (THREADSAFE)。
不能将全局用户出口定义为 OPENAPI 程序,但是如果对全局用户出口使用 ENABLE PROGRAM 命令的 THREADSAFE 选项,那么它将作为线程安全程序启用,并且可以在与使用它的应用程序相同的开放式 TCB 上运行。 如果 ENABLE PROGRAM 命令未指定 CONCURRENCY 或 API 选项,那么将使用程序定义上的选项。
下表显示了程序上可用的 CONCURRENCY 和 API 设置以及运行应用程序的 TCB 类型。
| CONCURRENCY 属性 | API 属性 | CICS TCB |
|---|---|---|
| 并行 (准租用) | API (CICSAPI) | 应用程序始终在 CICS 准重入 (QR TCB) 下运行。 如果切换到资源管理器的开放式 TCB ,那么 CICS 始终在返回到应用程序之前返回到 QR TCB。 |
| 并行 (准租用) | API (OPENAPI) | 组合无效。 OPENAPI 程序无法在 QR TCB 上运行。 |
| 并行 (线程安全) | API (CICSAPI) | 应用程序可以在 QR TCB 或开放式 TCB 上运行。 如果对资源管理器切换到开放式 TCB ,那么 CICS 在返回到应用程序时将保留在开放式 TCB 上。 如果切换到 QR TCB ,那么在返回到应用程序时, CICS 会保留在 QR TCB 上。 |
| 并行 (线程安全) | API (OPENAPI) | 与 CONCURRENCY (REQUIRED) API (OPENAPI) 相同。 |
| 并行 (必需) | API (CICSAPI) | 应用程序始终在开放式 TCB 上运行。 CICS 服务不需要 TCB 密钥匹配,因此应用程序始终在 L8 开放式 TCB 上运行。 OPENAPI 资源管理器使用 L8 TCB ,因此如果调用了 TCB 开关,那么不需要进行 TCB 切换。 如果切换到 QR TCB ,那么 CICS 会在返回到应用程序时返回到开放式 TCB。 |
| 并行 (必需) | API (OPENAPI) | 应用程序始终在开放式 TCB 上运行。 TCB 的键必须与程序的执行键匹配。 如果设置了 EXECKEY (USER) ,那么 CICS 使用 L9 TCB ,如果 EXECKEY (CICS) ,那么使用 L8 TCB 设置。 如果应用程序是用户密钥,并且调用了 OPENAPI 资源管理器,那么将发生从 L9 TCB 到 L8 TCB 的切换。 CICS 在返回到应用程序之前返回到 L9 TCB。 如果切换到 QR TCB ,那么 CICS 会在返回到应用程序时返回到开放式 TCB。 |