mirror of
https://github.com/OpenMP/Examples.git
synced 2025-04-07 23:22:11 +01:00
34 lines
1.0 KiB
Fortran
34 lines
1.0 KiB
Fortran
! @@name: tasking.3f
|
|
! @@type: F-fixed
|
|
! @@compilable: yes
|
|
! @@linkable: no
|
|
! @@expect: success
|
|
MODULE LIST
|
|
TYPE NODE
|
|
INTEGER :: PAYLOAD
|
|
TYPE (NODE), POINTER :: NEXT
|
|
END TYPE NODE
|
|
CONTAINS
|
|
SUBROUTINE PROCESS(p)
|
|
TYPE (NODE), POINTER :: P
|
|
! do work here
|
|
END SUBROUTINE
|
|
SUBROUTINE INCREMENT_LIST_ITEMS (HEAD)
|
|
TYPE (NODE), POINTER :: HEAD
|
|
TYPE (NODE), POINTER :: P
|
|
!$OMP PARALLEL PRIVATE(P)
|
|
!$OMP SINGLE
|
|
P => HEAD
|
|
DO
|
|
!$OMP TASK
|
|
! P is firstprivate by default
|
|
CALL PROCESS(P)
|
|
!$OMP END TASK
|
|
P => P%NEXT
|
|
IF ( .NOT. ASSOCIATED (P) ) EXIT
|
|
END DO
|
|
!$OMP END SINGLE
|
|
!$OMP END PARALLEL
|
|
END SUBROUTINE
|
|
END MODULE
|