OpenMP-Examples/sources/Example_mem_model.2f.f
2015-01-13 11:38:24 -08:00

39 lines
1.2 KiB
Fortran

! @@name: mem_model.2f
! @@type: F-fixed
! @@compilable: yes
! @@linkable: yes
! @@expect: rt-error
PROGRAM EXAMPLE
INCLUDE "omp_lib.h" ! or USE OMP_LIB
INTEGER DATA
INTEGER FLAG
FLAG = 0
!$OMP PARALLEL NUM_THREADS(2)
IF(OMP_GET_THREAD_NUM() .EQ. 0) THEN
! Write to the data buffer that will be read by thread 1
DATA = 42
! Flush DATA to thread 1 and strictly order the write to DATA
! relative to the write to the FLAG
!$OMP FLUSH(FLAG, DATA)
! Set FLAG to release thread 1
FLAG = 1;
! Flush FLAG to ensure that thread 1 sees the change */
!$OMP FLUSH(FLAG)
ELSE IF(OMP_GET_THREAD_NUM() .EQ. 1) THEN
! Loop until we see the update to the FLAG
!$OMP FLUSH(FLAG, DATA)
DO WHILE(FLAG .LT. 1)
!$OMP FLUSH(FLAG, DATA)
ENDDO
! Values of FLAG and DATA are undefined
PRINT *, 'FLAG=', FLAG, ' DATA=', DATA
!$OMP FLUSH(FLAG, DATA)
!Values DATA will be 42, value of FLAG still undefined */
PRINT *, 'FLAG=', FLAG, ' DATA=', DATA
ENDIF
!$OMP END PARALLEL
END