Ошибки
Функция pthread_once()
[EINVAL] значения, заданные пара
Примеры
Отсутствуют.
Замечания по использованию
Отсутствуют.
Логическое обоснование
Некоторые библиотеки С разработаны для дина
static int random_is_initialized = 0;
extern int initialize_random ();
int random_function () {
if (random_is_initialized == 0) {
initialize_random ();
random_is_initialized = 1;
}
... /* Операции, выполняемые после инициализации. */
}
Чтобы хранить такую же структуру в многопоточной программе, нужно использовать новый примитив. В противном случае инициализация библиотеки должна быть выполнена путем явного вызова экспортированной функции инициализации до какого бы то ни было использования этой библиотеки.
Для динамической инициализации в многопоточном процессе недостаточно простого флага инициализации; этот флаг необходимо защищать от модификации данных со стороны нескольких потоков, одновременно обращающихся к библиотеке. Защита флага требует использования мьютекса, однако мьютексы должны быть инициализированы до их использования. Для гарантии того, что мьютекс инициализируется только единожды, требуется рекурсивное решение этой проблемы.
Использование функции pthread_once () не только предоставляет гарантированные реализацией средства дина
#include <pthread.h>
static pthread_once_t random_is_initialized =PTHREAD_ONCE_INIT;
extern int initialize_random();
int random_function()
{
(void) pthread_once (&random_is_initialized,initialize_random); ...
/* Операции, выполняемые после инициализации. */
}
Обратите вни
Будущие направления
Отсутствуют.
Смотри также
Том Base Definitions стандарта1ЕЕЕStd 1003.1-2001, <pthread.h>.
Последовательность внесения изменений
Функции впервые реализованы в выпуске Issue 5. Включены для согласования с расширением POSIX Threads Extension.
Issue 6
Функция pthread_once () от
Был добавлен код ошибки [EINVAL], возвращаемый при неудачном завершении функции в случае, если хотя бы один из аргументов недействителен.
pthread_rwlock_destroy, pthread_rwlock_init
Имя
pthread_rwlock_destroy, pthread_rwlock_init — функции разрушения и инициализации объекта блокировки для чтения и записи.
Синопсис
THR
#include <pthread.h>
int pthread_rvlock_destroy(pthread_rwlock_t *rwlock);
int pthread_rwlock_init( pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr);
Описание
Функция pthread_rwlock_destroy() используется для разрушения объекта блокировки чтения и записи, адресуемого параметром
Функция pthread_rwlock_init() выделяет любые ресурсы, необходимые для использования объекта блокировки для чтения и записи, адресуемого пара
При неудачном выполнении функции pthread_rwlock_init() объект, адресуемый параметро