Spec-Zone.ru › GNU Fortran 6

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

Spec-Zone.ru

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