5.5 Безопасность многопоточности библиотеки времени выполнения
GNU Fortran может использоваться в программах с несколькими потоками, например, с помощью OpenMP, вызовом функций обработки потоков ОС через ISO_C_BINDING или вызовом кода библиотеки GNU Fortran, скомпилированной в многопоточную программу.
Библиотека времени выполнения GNU Fortran (libgfortran) поддерживает одновременный вызов из нескольких потоков со следующими исключениями.
Во время инициализации библиотеки используется функция C getenv, которая не обязательно является многопоточной. Аналогично, функция getenv используется для реализации GET_ENVIRONMENT_VARIABLE и GETENV встроенных функций. Пользователь отвечает за обеспечение того, чтобы среда не обновлялась одновременно, когда происходит любая из этих операций.
Встроенные функции EXECUTE_COMMAND_LINE и SYSTEM реализуются с помощью функции system, которая не обязательно является многопоточной. Пользователь отвечает за обеспечение того, чтобы system не вызывался одновременно.
Для платформ, не поддерживающих многопоточные функции POSIX, дополнительные функции могут не быть многопоточными. Для получения подробной информации см. документацию для вашей операционной системы.
Библиотека времени выполнения GNU Fortran использует различные функции библиотеки C, зависящие от локали, такие как strtod и snprintf. Для правильной работы в программах, учитывающих локаль, которые устанавливают локаль с помощью setlocale, локаль сбрасывается до стандартной локали «C» во время выполнения форматированного READ или WRITE оператора. На целевых платформах, поддерживающих функции локали POSIX 2008 для каждого потока (например, newlocale, uselocale, freelocale), используются эти функции, и поэтому глобальная локаль, установленная с помощью setlocale, или локаль каждого потока в других потоках не затрагиваются. Однако на целевых платформах, не имеющих этой функциональности, глобальная локаль LC_NUMERIC устанавливается в «C» во время форматированного ввода-вывода. Таким образом, на таких платформах небезопасно вызывать setlocale одновременно из другого потока во время выполнения форматированной операции ввода-вывода Fortran. Кроме того, другие потоки, выполняющие действия, зависящие от локали LC_NUMERIC, могут работать неправильно, если в другом потоке выполняется операция форматированного ввода-вывода.
Следующая: Согласованность и долговечность данных, Предыдущая: Встроенные функции MAX и MIN с аргументами REAL NaN, Вверх: Характеристики компилятора [Содержание][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-10.2.0/gfortran/Thread_002dsafety-of-the-runtime-library.html