45 lines
1.2 KiB
Fortran
45 lines
1.2 KiB
Fortran
program concurrency
|
|
implicit none
|
|
character(len=*), parameter :: str1 = 'Enjoy'
|
|
character(len=*), parameter :: str2 = 'Rosetta'
|
|
character(len=*), parameter :: str3 = 'Code'
|
|
integer :: i
|
|
real :: h
|
|
real, parameter :: one_third = 1.0e0/3
|
|
real, parameter :: two_thirds = 2.0e0/3
|
|
|
|
interface
|
|
integer function omp_get_thread_num
|
|
end function omp_get_thread_num
|
|
end interface
|
|
interface
|
|
integer function omp_get_num_threads
|
|
end function omp_get_num_threads
|
|
end interface
|
|
|
|
! Use OpenMP to create a team of threads
|
|
!$omp parallel do private(i,h)
|
|
do i=1,20
|
|
! First time through the master thread output the number of threads
|
|
! in the team
|
|
if (omp_get_thread_num() == 0 .and. i == 1) then
|
|
write(*,'(a,i0,a)') 'Using ',omp_get_num_threads(),' threads'
|
|
end if
|
|
|
|
! Randomize the order
|
|
call random_number(h)
|
|
|
|
!$omp critical
|
|
if (h < one_third) then
|
|
write(*,'(a)') str1
|
|
else if (h < two_thirds) then
|
|
write(*,'(a)') str2
|
|
else
|
|
write(*,'(a)') str3
|
|
end if
|
|
!$omp end critical
|
|
end do
|
|
!$omp end parallel do
|
|
|
|
end program concurrency
|