gpt4 book ai didi

fortran - 文件已在另一个单元中打开 程序中止。

转载 作者:行者123 更新时间:2023-12-02 20:56:46 27 4
gpt4 key购买 nike

这是我编写的用于测试多线程独立读取文件的程序:

program he
use omp_lib

implicit none
integer :: i, a(20), funit

open(unit=2, file='dat/he', status='replace')
write(2, '(i2/, i2/, i2/, i2)') 1, 3, 5, 7
close(2)

!$omp parallel do num_threads(20) private(funit)
do i = 1, 20
funit=100+omp_get_thread_num()
open(funit, file='dat/he', status='old')
read(funit,'(i2)') a(i)
end do
!$omp end parallel do

print *, a
end program he

我用gfortran编译器编译它,没有出现任何错误:gfortran -fopenmp -o exe a.f90,并运行./exe,但每次都出现不同的错误我运行了./exe。不过,我还使用 ifort 编译了它:ifort -qopenmp -o exe a.f90,并成功运行它,./exe

gfortran 在运行时的错误之一是

At line 15 of file fortran_learning_book.f90 (unit = 102)
Fortran runtime error: File already opened in another unit

Program aborted. Backtrace:

Program aborted. Backtrace:
#0 0x10c30aff2
#0 0x10c30aff2

Program aborted.

最佳答案

您的代码不是有效的标准 Fortran,因此在不同的编译器中表现出未定义的行为。 Fortran 标准非常明确:

If a file is already connected to a unit, an OPEN statement on that file with a different unit shall not be executed.

(ISO/IEC 1539-1:2010 第 9.5.6.1 节)

与其他一些语言不同,标准 Fortran 不允许多次打开同一文件。

编辑: 正如 IanH 所指出的,即将推出的 Fortran 标准(非正式称为 Fortran 2015)将正式取消该限制,但仍将由实现决定是否对同一文件进行多个连接。允许或不允许。

GNU Fortran 和 Intel Fortran 都能够使用 OpenMP 扩展编译正确 Fortran 代码。

关于fortran - 文件已在另一个单元中打开 程序中止。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39989481/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com