ジョブ間同期・通信マクロ実行
信号通信(資源管理用)サンプルプログラム
- サンプルプログラム
-
信号通信の資源管理用のサンプルプログラムです。
本当は資源占有が必要な処理を組み込むことができればよかったのですが、適当な処理が思いつかなかったので、資源占有しなければならない処理の代わりとしてインターバルタイマで10秒程度待ち合わせをするようにしています。
同じように資源占有する必要の無い処理の代わりにもインターバルタイマで5秒程度待ち合わせをするようにしています。
000010*********************************************** 000020** IJCC同期サンプルプログラム ** 000030*********************************************** 000040 IDENTIFICATION DIVISION. 000050 PROGRAM-ID. SAMIJC. 000060 ENVIRONMENT DIVISION. 000070 DATA DIVISION. 000080 WORKING-STORAGE SECTION. 000090*********************************************** 000100** IJCC DATA AREA ** 000110*********************************************** 000120** 共通 000130 01 IJCCA01 PIC X(128). 000140 01 IJCCA02. 000150 02 IJCCA02-1 PIC X(02). 000160 02 IJCCA02-2 PIC X(02). 000170 01 IJCCA03. 000180 02 IJCCA03-1 PIC X(01). 000190 02 IJCCA03-2 PIC X(02). 000200 02 IJCCA03-3 PIC X(02). 000210 02 IJCCA03-4 PIC X(20). 000220** 生成 000230 01 IJCCA14. 000240 02 IJCCA14-1 PIC X(01). 000250 02 IJCCA14-2 PIC X(01). 000260 02 IJCCA14-3 PIC X(01). 000270 02 FILLER PIC X(01). 000280 01 IJCCA15. 000290 02 IJCCA15-1 PIC 9(05). 000300 02 IJCCA15-2 PIC 9(05). 000310** 使用開始宣言 000320 01 IJCCA24 PIC X(01). 000330 01 IJCCA25 PIC X(01). 000340 01 IJCCA26 PIC X(01). 000350 01 IJCCA27 PIC X(01). 000360** 信号受信 000370 01 IJCCA34 PIC X(01). 000380** 信号送信 000390 01 IJCCA44. 000400 02 IJCCA44-1 PIC X(01). 000410 02 IJCCA44-2 PIC X(01). 000420** 使用終了宣言(共通部分のみ) 000430** 解放 000440 01 IJCCA64 PIC X(01). 000450 01 IJCCA65 PIC X(01). 000460********************* 000470** TIMER ** 000480********************* 000490 01 A. 000500 02 SEC PIC 9(03). 000510 02 FILLER PIC 9 VALUE ZERO. 000520 01 A-R REDEFINES A PIC 9(4). 000530 PROCEDURE DIVISION. 000540*************************************************** 000550** 主処理 ** 000560*************************************************** 000570 MPRG. 000580*** IJCC生成 *** 000590 PERFORM IJCCCR THRU IJCCCRE. 000600*** IJCC使用開始宣言 *** 000610 PERFORM IJCCAT THRU IJCCATE. 000620*-------資源占有しなくても良い処理の代替------------ 000630 PERFORM 10 TIMES 000640 MOVE 5 TO SEC 000650 CALL "CBLTIMER" USING A-R 000660*--------------------------------------------------- 000670*** 信号受信 *** 000680 PERFORM IJCCRS THRU IJCCRSE 000690*** 000700*** ここは資源占有中 *** 000710*** 000720*---------資源占有が必要な処理の代替---------------- 000730 MOVE 10 TO SEC 000740 CALL "CBLTIMER" USING A-R 000750*--------------------------------------------------- 000760*** 信号送信 *** 000770 PERFORM IJCCSS THRU IJCCSSE 000780*--------------------------------------------------- 000790 END-PERFORM 000800*** IJCC使用終了宣言 ** 000810 PERFORM IJCCDE THRU IJCCDEE 000820*** IJCC解放 *** 000830 PERFORM IJCCRL THRU IJCCRLE. 000840 MPRGE. 000850 STOP RUN. 000860*************************************************** 000870** IJCC各処理 ** 000880*************************************************** 000890*** IJCC生成 *** 000900 IJCCCR. 000910 INITIALIZE IJCCA01 IJCCA02 IJCCA03 IJCCA14 IJCCA15 000920 MOVE "A" TO IJCCA03-1 000930 MOVE " " TO IJCCA03-2 000940 MOVE "AA" TO IJCCA03-3 000950 MOVE "TEST-IJCCA" TO IJCCA03-4 000960 MOVE "S" TO IJCCA14-1 000970 MOVE "R" TO IJCCA14-2 000980 MOVE "J" TO IJCCA14-3 000990 MOVE 1 TO IJCCA15-1 001000 MOVE 0 TO IJCCA15-2 001010 CALL "SYSIJCCR" USING IJCCA01 IJCCA02 IJCCA03 001020 IJCCA14 IJCCA15. 001030 IJCCCRE. 001040 EXIT. 001050*** IJCC使用開始宣言 *** 001060 IJCCAT. 001070 INITIALIZE IJCCA24 IJCCA25 IJCCA26 IJCCA27 001080 MOVE "T" TO IJCCA24 001090 MOVE "S" TO IJCCA25 001100 MOVE "S" TO IJCCA26 001110 MOVE "T" TO IJCCA27 001120 CALL "SYSIJCAT" USING IJCCA01 IJCCA02 IJCCA03 IJCCA24 001130 IJCCA25 IJCCA26 IJCCA27. 001140 IJCCATE. 001150 EXIT. 001160*** 信号受信 *** 001170 IJCCRS. 001180 INITIALIZE IJCCA34 001190 MOVE "W" TO IJCCA34 001200 CALL "SYSIJCRS" USING IJCCA01 IJCCA02 IJCCA03 IJCCA34. 001210 IJCCRSE. 001220 EXIT. 001230 IJCCSS. 001240 INITIALIZE IJCCA44 001250 MOVE "N" TO IJCCA44-1 001260 MOVE "T" TO IJCCA44-2 001270 CALL "SYSIJCSS" USING IJCCA01 IJCCA02 IJCCA03 IJCCA44. 001280 IJCCSSE. 001290 EXIT. 001300 IJCCDE. 001310 CALL "SYSIJCDE" USING IJCCA01 IJCCA02 IJCCA03. 001320 IJCCDEE. 001330 EXIT. 001340*** IJCC解放 *** 001350 IJCCRL. 001360 INITIALIZE IJCCA64 IJCCA65 001370 MOVE "T" TO IJCCA64 001380 MOVE "T" TO IJCCA65 001390 CALL "SYSIJCRL" USING IJCCA01 IJCCA02 IJCCA03 001400 IJCCA64 IJCCA65. 001410 IJCCRLE. 001420 EXIT.
サンプルプログラムなので、異常処理関係は一切行っていません。実際はそれらを組み込むことになるでしょう。
IJCCの生成は1回で良いので、このサンプルプログラムを複数起動すると2個目以降サンプルプログラムでエラーになるはずです。しかしサンプルプログラムではエラーを無視してしまうので、たまたま2個目以降も動きます。
サンプルプログラムは5秒の待ち合わせ+10秒の待ち合わせを10回行う仕組みになっています。
サンプルプログラムを1個実行すると、だいたい150秒ぐらいで終わるはずです。
サンプルプログラムを2個同時に実行すると、何秒かかるか試してみてください。300秒でしょうか、それとも150秒でしょうか?
3個動かすとどうでしょうか?
サンプルプログラムを1個、2個同時に起動したときのタイムチャート(3個同時ではどうなる?)