5.3 Безопасность потоков библиотеки времени выполнения
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, могут работать некорректно, если в другом потоке выполняется операция форматированного ввода/вывода.
Далее: Согласованность и долговечность данных, Предыдущее: Внутреннее представление логических переменных, Вверх: Характеристики компилятора [Оглавление][Указатель]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-7.2.0/gfortran/Thread_002dsafety-of-the-runtime-library.html