2 ! { dg-options "-ffixed-form" }
4 USE OMP_LIB
, ONLY
: OMP_NEST_LOCK_KIND
8 INTEGER (OMP_NEST_LOCK_KIND
) LCK
11 SUBROUTINE INCR_A(P
, A
)
12 ! called only from INCR_PAIR, no need to lock
14 TYPE(LOCKED_PAIR
) :: P
18 SUBROUTINE INCR_B(P
, B
)
19 ! called from both INCR_PAIR and elsewhere,
20 ! so we need a nestable lock
21 USE OMP_LIB
! or INCLUDE "omp_lib.h"
23 TYPE(LOCKED_PAIR
) :: P
25 CALL OMP_SET_NEST_LOCK(P
%LCK
)
27 CALL OMP_UNSET_NEST_LOCK(P
%LCK
)
29 SUBROUTINE INCR_PAIR(P
, A
, B
)
30 USE OMP_LIB
! or INCLUDE "omp_lib.h"
32 TYPE(LOCKED_PAIR
) :: P
35 CALL OMP_SET_NEST_LOCK(P
%LCK
)
38 CALL OMP_UNSET_NEST_LOCK(P
%LCK
)
39 END SUBROUTINE INCR_PAIR
41 USE OMP_LIB
! or INCLUDE "omp_lib.h"
43 TYPE(LOCKED_PAIR
) :: P
44 INTEGER WORK1
, WORK2
, WORK3
45 EXTERNAL WORK1
, WORK2
, WORK3
46 !$OMP PARALLEL SECTIONS
48 CALL INCR_PAIR(P
, WORK1(), WORK2())
50 CALL INCR_B(P
, WORK3())
51 !$OMP END PARALLEL SECTIONS