Parallel Programming Guide for HP-UX Systems
Parallel synchronization
Synchronizing code
Chapter 8160
QOUT)
IBAR = WAIT_BARRIER(COMPBAR,7)
C$DIR NEXT_TASK ! TASK 4:
CALL
THREAD_WRK(NIN,NOUT,QIN,QOUT,IN_QIN,OUT_QIN,IN_QOUT,OUT_
QOUT)
IBAR = WAIT_BARRIER(COMPBAR,7)
C$DIR NEXT_TASK ! TASK 5:
CALL
THREAD_WRK(NIN,NOUT,QIN,QOUT,IN_QIN,OUT_QIN,IN_QOUT,OUT_
QOUT)
IBAR = WAIT_BARRIER(COMPBAR,7)
C$DIR NEXT_TASK ! TASK 6:
CALL
THREAD_WRK(NIN,NOUT,QIN,QOUT,IN_QIN,OUT_QIN,IN_QOUT,OUT_
QOUT)
IBAR = WAIT_BARRIER(COMPBAR,7)
C$DIR NEXT_TASK ! TASK 7:
CALL
THREAD_WRK(NIN,NOUT,QIN,QOUT,IN_QIN,OUT_QIN,IN_QOUT,OUT_
QOUT)
IBAR = WAIT_BARRIER(COMPBAR,7)
C$DIR NEXT_TASK ! TASK 8:
CALL
THREAD_WRK(NIN,NOUT,QIN,QOUT,IN_QIN,OUT_QIN,IN_QOUT,OUT_
QOUT)
IBAR = WAIT_BARRIER(COMPBAR,7)
DONECOMP = .TRUE.
C$DIR END_TASKS
END
Before looking at the THREAD_WRK subroutine it is necessary to examine
these parallel tasks, particularly task 1, the I/O server. Task 1 performs
all the I/O required by all the tasks:
• Conditionally locked gates control task 1’s access to one section of
code that fills the input queue and one that empties the output
queue.
• Task 1 works by first filling an input buffer. The code that does this
does not require gate protection because no other tasks attempt to
access the input buffer array.