`

【转】谈谈CICS ENQ,DEQ的使用_REDEMPTION_百度空间

阅读更多

在CICS中对于需要序列化访问的资源, 比如流水号分配等, 都可以使用ENQ, DEQ来保证顺序化访问, 对于ENQ, DEQ之间的代码, 只有一个TASK能够占有, 当这个TASK通过ENQ 资源, 其他TASK ENQ时都会返回ENQBUSY, 一直等待直到HOLD资源的TASK DEQ资源(除非程序handle ENQBUSY或者指定NOSUSPEND). ENQ, DEQ..

.

在CICS中对于需要序列化访问的资源, 比如流水号分配等, 都可以使用ENQ, DEQ来保证顺序化访问, 对于ENQ, DEQ之间的代码, 只有一个TASK能够占有, 当这个TASK通过ENQ 资源, 其他TASK ENQ时都会返回ENQBUSY, 一直等待直到HOLD资源的TASK DEQ资源(除非程序handle ENQBUSY或者指定NOSUSPEND).

ENQ, DEQ是enqueue, dequeue的缩写. 语法如下:

________________________________________________________________________ | |
| |
| >>__ENQ__RESOURCE(data-area)__ ____________________ _________________> |
| |_LENGTH(data-value)_| |
| |
| _UOW_______________ |
| >__|___________________|___ ___________ ___>| |_MAXLIFETIME(cvda)_| |_NOSUSPEND_| |
| |_TASK______________| |
| Conditions: ENQBUSY, INVREQ, LENGERR |
| |
|________________________________________________________________________|

________________________________________________________________________
| |
| |
| >>__DEQ__RESOURCE(data-area)__ ____________________ _________________> |
| |_LENGTH(data-value)_| |
| |
| _UOW_______________ |
| >__|___________________|__>| |_MAXLIFETIME(cvda)_| |
| |_TASK______________| |
| Conditions: INVREQ, LENGERR |
| |
| This command is threadsafe. |
| |
|________________________________________________________________________|

ENQ,DEQ的使用方法,

对于资源, 我们可以区分成两种, 使用ENQ,DEQ的语法也不同:

1,说明数据区的地址代表资源, 资源是在内存中的地址, 而不是内容, 比如CWA中的变量.

2,说明数据区的内容代表资源, 资源是他的内容, 而不是地址. 比如在WORKING-STORAGE的变量. 这种的使用,必须指定LENGTH option, 告诉CICS需要ENQ,DEQ是数据变量的内容.

eg, 比如你define jnl-seq在CWA中,则流水号分配的伪代码如下:

EXEC CICS ENQ RESOURCE(JNL-SEQ) END-EXEC

ADD 1 TO JNL-SEQ

EXEC CICS DEQ RESOURCE(JNL-SEQ) END-EXEC

如果你只是deinfe jnl-seq在working-storage, 则流水号分配的伪代码如下:

EXEC CICS ENQ RESOURCE(JNL-SEQ) LENGTH(LENGTH OF JNL-SEQ) END-EXEC

ADD 1 TO JNL-SEQ

EXEC CICS DEQ RESOURCE(JNL-SEQ) LENGTH(LENGTH OF JNL-SEQ) END-EXEC.

【转】谈谈CICS ENQ,DEQ的使用_REDEMPTION_百度空间

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics