Spec-Zone.ru › GNU Fortran 6

8.2.5 _gfortran_caf_register — Регистрация комассивов

Описание:

Выделяет память для комассива и создаёт маркер для его идентификации. Функция вызывается как для комассивов с атрибутом SAVE , так и при использовании явного ALLOCATE выражения. Если произошла ошибка, и STAT является NULL указателем, функция должна аварийно завершиться с выводом сообщения об ошибке и запуском завершения по ошибке. Если ошибка не произошла и STAT присутствует, он должен быть установлен в ноль. В противном случае, он должен быть установлен в положительное значение, и, если не NULL, ERRMSG должен быть установлен в строку, описывающую сбой. Функция должна вернуть указатель на затребованную память для локального изображения, как это сделало бы вызов malloc.

Для CAF_REGTYPE_COARRAY_STATIC и CAF_REGTYPE_COARRAY_ALLOC, переданный размер представляет собой затребованный размер в байтах. Для CAF_REGTYPE_LOCK_STATIC, CAF_REGTYPE_LOCK_ALLOC и CAF_REGTYPE_CRITICAL это размер массива или единица для скаляра.

Синтаксис:

void *caf_register (size_t size, caf_register_t type, caf_token_t *token, int *stat, char *errmsg, int errmsg_len)

Аргументы:
size Для обычных комассивов — размер комассива в байтах; для типов блокировок и событий — количество элементов.
type один из типов caf_register_t.
token intent(out) Непрозрачный указатель, идентифицирующий комассив.
stat intent(out) Для распределимых комассивов хранит значение STAT; может быть NULL.
errmsg intent(out) При возникновении ошибки устанавливается в сообщение об ошибке; может быть NULL.
errmsg_len размер буфера errmsg.
ПРИМЕЧАНИЯ

Нераспределимые комассивы должны быть зарегистрированы перед использованием из удалённых изображений. Чтобы гарантировать это, их необходимо зарегистрировать до начала основной программы. Этого можно достичь, создав конструкторские функции. Именно это делает GCC, чтобы память выделялась и не использовалась статическая память даже для нераспределимых комассивов. Маркер позволяет идентифицировать комассив; для процессора маркер является несовпадающим указателем. Библиотека может, например, хранить базовый адрес комассива в маркере, какой-либо дескриптор или более сложную структуру.

Для обычных комассивов возвращённый указатель используется для доступа к локальному изображению. Для типов блокировок значение используется только для проверки статуса выделения. Обратите внимание, что для критических блоков блокировка требуется только на одном изображении; в операторе блокировки процессор всегда должен передавать индекс изображения, равный единице, для переменных блокировки критических блоков (CAF_REGTYPE_CRITICAL). Для типов блокировок и переменных критических блоков начальное значение должно быть разблокировано (соответственно, не находиться в критической секции), например, значение false; для типов событий начальное состояние должно быть без события, например, ноль.

Далее: _gfortran_caf_deregister, Предыдущее: _gfortran_caf_num_images, Вверх: Документация по ABI функций [Содержание][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-6.4.0/gfortran/_005fgfortran_005fcaf_005fregister.html

Spec-Zone.ru

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