mirror of
https://github.com/OpenMP/Examples.git
synced 2025-04-07 23:22:11 +01:00
41 lines
983 B
Fortran
41 lines
983 B
Fortran
! @@name: threadprivate.5f
|
|
! @@type: F-fixed
|
|
! @@compilable: yes
|
|
! @@linkable: yes
|
|
! @@expect: success
|
|
PROGRAM INC_GOOD2
|
|
INTEGER, ALLOCATABLE, SAVE :: A(:)
|
|
INTEGER, POINTER, SAVE :: PTR
|
|
INTEGER, SAVE :: I
|
|
INTEGER, TARGET :: TARG
|
|
LOGICAL :: FIRSTIN = .TRUE.
|
|
!$OMP THREADPRIVATE(A, I, PTR)
|
|
|
|
ALLOCATE (A(3))
|
|
A = (/1,2,3/)
|
|
PTR => TARG
|
|
I = 5
|
|
|
|
!$OMP PARALLEL COPYIN(I, PTR)
|
|
!$OMP CRITICAL
|
|
IF (FIRSTIN) THEN
|
|
TARG = 4 ! Update target of ptr
|
|
I = I + 10
|
|
IF (ALLOCATED(A)) A = A + 10
|
|
FIRSTIN = .FALSE.
|
|
END IF
|
|
|
|
IF (ALLOCATED(A)) THEN
|
|
PRINT *, 'a = ', A
|
|
ELSE
|
|
PRINT *, 'A is not allocated'
|
|
END IF
|
|
|
|
PRINT *, 'ptr = ', PTR
|
|
PRINT *, 'i = ', I
|
|
PRINT *
|
|
|
|
!$OMP END CRITICAL
|
|
!$OMP END PARALLEL
|
|
END PROGRAM INC_GOOD2
|