Spec-Zone.ru › GNU Fortran 5

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-5.4.0/gfortran/Thread_002dsafety-of-the-runtime-library.html

Spec-Zone.ru

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