Spec-Zone.ru › GNU Fortran 8

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

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, могут работать некорректно, если форматированная операция ввода-вывода выполняется в другом потоке.

Далее: Согласованность и долговечность данных, Предыдущее: Внутреннее представление логических переменных, Вверх: Характеристики компилятора [Содержание][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-8.4.0/gfortran/Thread_002dsafety-of-the-runtime-library.html

Spec-Zone.ru

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