Spec-Zone.ru › GNU Fortran 14

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

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

Spec-Zone.ru

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