mirror of
https://github.com/OpenMP/Examples.git
synced 2025-04-10 08:22:11 +01:00
36 lines
730 B
Fortran
36 lines
730 B
Fortran
! @@name: mem_model.1
|
|
! @@type: F-free
|
|
! @@operation: run
|
|
! @@expect: success
|
|
! @@version: omp_3.1
|
|
PROGRAM MEMMODEL
|
|
INCLUDE "omp_lib.h" ! or USE OMP_LIB
|
|
INTEGER X, XVAL
|
|
|
|
X = 2
|
|
!$OMP PARALLEL NUM_THREADS(2) SHARED(X)
|
|
|
|
IF (OMP_GET_THREAD_NUM() .EQ. 0) THEN
|
|
!$OMP ATOMIC WRITE
|
|
X = 5
|
|
ELSE
|
|
!$OMP ATOMIC READ
|
|
XVAL = X
|
|
! PRINT 1: XVAL can be 2 or 5
|
|
PRINT *,"1: THREAD# ", OMP_GET_THREAD_NUM(), "X = ", XVAL
|
|
ENDIF
|
|
|
|
!$OMP BARRIER
|
|
|
|
IF (OMP_GET_THREAD_NUM() .EQ. 0) THEN
|
|
! PRINT 2
|
|
PRINT *,"2: THREAD# ", OMP_GET_THREAD_NUM(), "X = ", X
|
|
ELSE
|
|
! PRINT 3
|
|
PRINT *,"3: THREAD# ", OMP_GET_THREAD_NUM(), "X = ", X
|
|
ENDIF
|
|
|
|
!$OMP END PARALLEL
|
|
|
|
END PROGRAM MEMMODEL
|