锁定持续时间

可恢复和不可恢复数据集的可重复读请求的共享锁定一直保持到下一个同步点。

针对不可恢复数据集中的记录的互斥锁定仅在请求的持续时间内保留-即,在请求开始时获取这些记录,并在请求完成时释放这些记录。 例如,当 WRITE 请求完成时,将释放 WRITE 请求获取的锁定,并且在以下 REWRITE 或 DELETE 请求完成时,将立即释放 READ UPDATE 请求获取的锁定。 在异常情况下,顺序请求获取的锁定可能会在立即操作完成后持续存在。 顺序请求是 WRITE 命令,用于指定 MASSINSERT 选项并浏览更新请求。 使用 MASSINSERT 选项的 WRITE 命令获取的锁定始终在相应的 UNLOCKcommand 完成时释放,但可以由 WRITE MASSINSERT 序列中的较早请求释放。 序列中导致释放锁定的确切请求不可预测。 同样,在以下 DELETE 或 REWRITE 命令完成后, READNEXT UPDATE 命令获取的锁定仍可能存在。 虽然保证在后续 ENDBR 命令完成时释放此锁定,但可以通过浏览序列中的某个中间请求释放此锁定。

如果请求更新可恢复数据集,那么关联的互斥锁定必须保持挂起状态,直到下一个同步点为止。 这将确保资源保持受保护状态,直到作出落实或回退请求的决策为止。 如果 CICS 失败, VSAM 将继续保持锁定,直到 CICS 重新启动为止。
图 1。 可恢复数据集上 CICS 任务之间的锁定争用图示
 Task 1 Task 2
CICS: READ(filea) UPDATE KEY(99)
VSAM: grants exclusive lock - key 99
CICS: READ(filea) KEY(99)
with integrity
VSAM: Queues request for shared lock
CICS: REWRITE(filea) KEY(99)
VSAM: holds exclusive lock until syncpoint
 
CICS: task completes and takes syncpoint
VSAM: frees exclusive lock
VSAM grants shared lock to task 2