大型机汇编(HLASM)之多进程指令CS 和 CDS
来源:互联网 发布:简单的java项目实例 编辑:程序博客网 时间:2024/06/06 10:00
大型机汇编语言中的多进程处理是通过某些特殊指令来完成的,比如本文的CS(compare and swap)和CDS(compare double and swap),下面详细介绍其功能。
在多进程环境中,比如在CICS环境下,某些transaction会被多个task调用,这种情况下某些全局变量(比如counter,flag),就可能同时被多个task同时修改。。。
现在介绍的CS 和CDS指令就是为此功能而设计的,即如何在多进程中实现序列化更改或者怎么实现锁机制。
ICM R7,B'1111',0(R4) put original counter value into R7
LOOPCTR LR R8,R7 set up one copy to modify
LA R8,1(R8) + 1
CS R7,R8,0(R4) update the counter in storage
BC 4,LOOPCTR if the original value destroyed(CC=1), loop
上面这段代码的功能就是为了实现把0(R4)处的数值+1,具体流程为:
1.先把数值move提取到一个寄存器R7里,以便比较是否在本task更改其数据的时候,其他tasks已经成功地更改了其数据
2.设置个循环体,本循环体的目的就是实现能成功把0(R4)里的数值+1。
3.如果+1更改成功则control继续往下走,否则一直执行循环体
CS指令翻译成伪代码如下:
Lock the location 0(R4)
If R7 == 0(R4)
Store the value of R8 into 0(R4) and set the condition code to 0
// 0 indicates a successful update, and the program can proceed
Else
Load the value of 0(R4) into R7 and set the condition code to 1
// 1 indicates an unsuccessful update. which means 0(R4)
// had been changed between the time ICM executed and CS
End-if
Unlock the location 0(R4)
有问题请联系QQ349106216
- 大型机汇编(HLASM)之多进程指令CS 和 CDS
- 大型机汇编(mainframe assembler/HLASM)之LA指令
- 大型机汇编(mainframe assembler/HLASM)之BAS指令
- 大型机汇编(mainframe assembler/HLASM)之藏巧于拙
- 大型机汇编(mainframe assembler/HLASM)之LOCTR
- 大型机汇编(mainframe assembler/HLASM)之CICS调用
- 大型机汇编(mainframe assembler/HLASM)之DUMP解读
- 大型机汇编(mainframe assembler/HLASM)之STCK/STCKE
- 大型机汇编(mainframe assembler/HLASM)之代码精简高效
- 大型机汇编(mainframe assembler/HLASM)之代码loop篇
- 大型机汇编(mainframe assembler/HLASM)之加密与解密
- 大型机汇编(mainframe assembler/HLASM)之S0C4解读
- 大型机汇编(mainframe assembler/HLASM)之线程工作栈
- 大型机汇编(mainframe assembler/HLASM)之中断向量表
- 大型机汇编(mainframe assembler/HLASM)之Branch
- 大型机汇编(mainframe assembler/HLASM)之C++语言对应
- 大型机汇编(mainframe assembler/HLASM)之COBOL解惑
- 大型机汇编(mainframe assembler/HLASM)之S0C7错误
- source code
- The currently displayed page contains invalid values
- try catch
- streams流复制ORA-01403错误解决一则
- RegExp类型
- 大型机汇编(HLASM)之多进程指令CS 和 CDS
- [AS3] 文字显示
- 数字录音机 汇编实验
- 模板缓存1
- 如何解决Install ncurses(ncurses-devel) and try again
- 取偏移地址指令总结(不完整版)0
- 关于.git/config文件
- 插入排序的递归实现
- Java 异常总结