https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92836

--- Comment #12 from Andrew Benson <abensonca at gmail dot com> ---
(In reply to Thomas Koenig from comment #11)
> (In reply to Andrew Benson from comment #10)
> > (In reply to Thomas Koenig from comment #8)
> > My reasoning for using INQUIRE to check the existence of the file
> > is that if it doesn't exist I want one thread to proceed to create the data
> > for the file (and actually that thread will then spawn another set of nested
> > OpenMP threads to do that work).
> 
> If you look at 12.5.6.1 in F2018, you will find
> 
> If the file to be connected to the unit is the same as the file to which the
> unit is connected, a new connection is not
> established and values for any changeable modes (12.5.2) specified come into
> effect for the established connection;
> the current file position is unaffected. Before any effect on changeable
> modes, a wait operation is performed for
> any pending asynchronous data transfer operations for the specified unit. If
> the POSITION= specifier appears
> in such an OPEN statement, the value specified shall not disagree with the
> current position of the file. If the
> STATUS= specifier is included in such an OPEN statement, it shall be
> specified with the value OLD. Other than
> ERR=, IOSTAT=, and IOMSG=, and the changeable modes, the values of all other
> specifiers in such an OPEN
> statement shall not differ from those in effect for the established
> connection.
> 
> ... so my example was actually not quite correct, because the
> STATUS was wrong.
> 
> However, in order to to do what you describe, maybe an explicit variable
> to hold the file number (or flag) may be better, like this, with
> access guarded by OMP CRITICAL:
> 
> integer :: file_num = -1
> 
> !$omp parallel
> 
> ...
> 
> !$omp critical
>   if (file_num < 0) then
>     open (newunit = file_num, file="foo.dat")
>     ! Do a lot of other stuff
>   end if
> !$omp end critical
> ! file_num contains something valid here

That seems like a good approach - thanks for the suggestion!

Reply via email to