Sample Code for the Multithreading Example

The example has three code samples:

THRCBL QCBLLESRC
An ILE COBOL main procedure that creates the ILE COBOL threads, waits for them to finish, then exits.
SUBA QCBLLESRC
An ILE COBOL procedure that is called by the thread created by THRCBL.
SUBB QCBLLESRC
A second ILE COBOL procedure that is called by the thread created by THRCBL.

The sample code for THRCBL QCBLLESRC is shown in Figure 87.

Figure 87. Source code for 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".

      * Create a thread attributes object
           call procedure "pthread_attr_init" using attr
                          returning rc.

      * Define threads to be joinable
           call procedure "pthread_attr_setdetachstate" using attr
                          by value 0 size 4
                          returning rc.
      * Start creating thread(s)
           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.
      * Start joining thread(s)
           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.

      * Destroy thread attributes object
           call procedure "pthread_attr_destroy" using attr
                           returning rc.

The sample code for SUBA QCBLLESRC is shown in Figure 88.

Figure 88. Source code for 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.

The sample code for SUBB QCBLLESRC is shown in Figure 89

Figure 89. Source code for 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.