Spec-Zone.ru › GNU Fortran 12

4.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-12.1.0/gfortran/Thread-safety-of-the-runtime-library.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API