Spec-Zone.ru › GNU Fortran 9

5.5 Безопасность многопоточности библиотеки времени выполнения

GNU Fortran можно использовать в программах с несколькими потоками, например, с помощью OpenMP, вызывая функции обработки потоков ОС через ISO_C_BINDING или вызывая код библиотеки GNU Fortran, скомпилированный с помощью 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-9.3.0/gfortran/Thread_002dsafety-of-the-runtime-library.html

Spec-Zone.ru

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