! { dg-do run } ! Multiple threads call open/write/read/close in concurrency with different unit number, ! threads can acquire read lock concurrently, to find unit from cache or unit list very frequently, ! if not found, threads will acquire the write lock exclusively to insert unit to cache and unit list. ! This test case is used to stress both the read and write lock when access unit cache and list. program main use omp_lib implicit none integer:: unit_number, v1, v2, i character(11) :: file_name character(3) :: async = "no" !$omp parallel private (unit_number, v1, v2, file_name, async, i) do i = 0, 100 unit_number = 10 + omp_get_thread_num () write (file_name, "(I3, A)") unit_number, "_tst.dat" file_name = adjustl(file_name) open (unit_number, file=file_name, asynchronous="yes") ! call inquire with file parameter to test find_file in unix.c inquire (file=file_name, asynchronous=async) if (async /= "YES") stop 1 write (unit_number, *, asynchronous="yes") unit_number write (unit_number, *, asynchronous="yes") unit_number + 1 close(unit_number) open (unit_number, file = file_name, asynchronous="yes") read (unit_number, *, asynchronous="yes") v1 read (unit_number, *, asynchronous="yes") v2 wait (unit_number) if ((v1 /= unit_number) .or. (v2 /= unit_number + 1)) stop 2 close(unit_number, status="delete") end do !$omp end parallel end program