mirror of
https://github.com/OpenMP/Examples.git
synced 2025-04-07 23:22:11 +01:00
39 lines
1.2 KiB
Fortran
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
|