1
0
mirror of https://github.com/OpenMP/Examples.git synced 2025-04-11 00:42:12 +01:00
OpenMP-Examples/sources/Example_tasking.13.f90

34 lines
833 B
Fortran

! @@name: tasking.13f
! @@type: F-free
! @@compilable: yes
! @@linkable: no
! @@expect: success
recursive subroutine bin_search(pos, n, state)
use omp_lib
integer :: pos, n
character, pointer :: state(:)
character, target, dimension(n) :: new_state1, new_state2
integer, parameter :: LIMIT = 3
if (pos .eq. n) then
call check_solution(state)
return
endif
!$omp task final(pos > LIMIT) mergeable
if (.not. omp_in_final()) then
new_state1(1:pos) = state(1:pos)
state => new_state1
endif
state(pos+1) = 'z'
call bin_search(pos+1, n, state)
!$omp end task
!$omp task final(pos > LIMIT) mergeable
if (.not. omp_in_final()) then
new_state2(1:pos) = state(1:pos)
state => new_state2
endif
state(pos+1) = 'y'
call bin_search(pos+1, n, state)
!$omp end task
!$omp taskwait
end subroutine