マルチスレッド化の例のサンプル・コード

この例には、以下の 3 つのサンプル・コードがあります。

THRCBL QCBLLESRC
ILE COBOL スレッドを作成し、それらのスレッドが終わるのを待ってから、 終了する ILE COBOL メイン・プロシージャー。
SUBA QCBLLESRC
THRCBL が作成したスレッドによって呼び出される ILE COBOL プロシージャー。
SUBB QCBLLESRC
THRCBL が作成したスレッドによって呼び出される 2 番目の ILE COBOL プロシージャー。

THRCBL QCBLLESRC のサンプル・コードは 図 87 に示されています。

図 87. THRCBL QCBLLESRC のソース・コード
       PROCESS NOMONOPRC OPTIONS THREAD(SERIALIZE).
       IDENTIFICATION DIVISION.
       PROGRAM-ID. THRCBL.
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
         special-names.  system-console is oper1.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 pthread_attr_t typedef.
          05 FILLER PIC 9(8) usage binary occurs 4 times.
          05 FILLER USAGE POINTER.
       01 pthread_t typedef.
          05 FILLER USAGE POINTER.
          05 FILLER PIC 9(8) usage binary.
          05 FILLER PIC 9(8) usage binary.
          05 FILLER PIC 9(8) usage binary.
          05 FILLER PIC 9(8) usage binary.
          05 FILLER USAGE POINTER.
       01 PROC-SUBA-PTR USAGE PROCEDURE-POINTER.
       01 PROC-SUBB-PTR USAGE PROCEDURE-POINTER.
       01 attr type pthread_attr_t.
       01 rc PIC 9(8) usage binary value 0.
       01 group1.
          05 thread type pthread_t occurs 10 times.
       01 joinStatus0 USAGE POINTER.
       01 joinStatus1 USAGE POINTER.
       PROCEDURE DIVISION.
       TEST1-INIT.
           SET PROC-SUBA-PTR TO ENTRY PROCEDURE "SUBA".
           SET PROC-SUBB-PTR TO ENTRY PROCEDURE "SUBB".

      * スレッド属性オブジェクトを作成
           call procedure "pthread_attr_init" using attr
                           returning rc.


      * スレッドを結合可能として定義
           call procedure "pthread_attr_setdetachstate" using attr
                          by value 0 size 4
                          returning rc.
      * スレッドの作成開始
           call procedure "pthread_create" using thread(1) attr
                          by value PROC-SUBA-PTR omitted
                          returning rc.
           call procedure "pthread_create" using thread(2) attr
                          by value PROC-SUBB-PTR omitted
                          returning rc.
      * スレッドの結合開始
           call procedure "pthread_join" using by value thread(1)
                           by reference joinStatus0
                           returning rc.
           call procedure "pthread_join" using by value thread(2)
                           by reference joinStatus1
                           returning rc.

      * スレッド属性オブジェクトの破棄
           call procedure "pthread_attr_destroy" using attr
                           returning rc.

SUBA QCBLLESRC のサンプル・コードは、図 88 に示されています。

図 88. SUBA QCBLLESRC のソース・コード
       
       PROCESS NOMONOPRC OPTIONS THREAD(SERIALIZE).
       IDENTIFICATION DIVISION.
       PROGRAM-ID. SUBA.
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
         special-names.  system-console is oper1.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 one-line pic x(11).
       PROCEDURE DIVISION.
       TEST1-INIT.
           move "IN SUBA" TO ONE-LINE.
           DISPLAY one-line UPON oper1.

SUBB QCBLLESRC のサンプル・コードは、図 89 に示されています。

図 89. SUBB QCBLLESRC のソース・コード
       
       PROCESS NOMONOPRC OPTIONS THREAD(SERIALIZE).
       IDENTIFICATION DIVISION.
       PROGRAM-ID. SUBB.
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
         special-names.  system-console is oper1.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 one-line pic x(11).
       PROCEDURE DIVISION.
       TEST1-INIT.
           move "IN SUBB" TO ONE-LINE.
           DISPLAY one-line UPON oper1.