tss_create
|
Определено в заголовочном файле
<threads.h>
|
||
|
int
tss_create
(
tss_t
*
tss_key,
tss_dtor_t
destructor
)
;
|
(начиная с C11) | |
Создает новый ключ для локального хранилища потока и сохраняет его в объекте, на который указывает
tss_key
. Хотя одно и то же значение ключа может использоваться разными потоками, значения, связанные с ключом через
tss_set
, поддерживаются для каждого потока отдельно и сохраняются в течение всего времени жизни вызывающего потока.
Значение NULL ассоциируется с новосозданным ключом во всех существующих потоках, и при создании потока значения, ассоциированные со всеми ключами TSS, инициализируются как NULL .
Если
destructor
не является нулевым указателем, то также связывает деструктор, который вызывается при освобождении хранилища с помощью
thrd_exit
(но не с помощью
tss_delete
и не при завершении программы с помощью
exit
).
Вызов
tss_create
из деструктора потокового локального хранилища приводит к неопределенному поведению.
Содержание |
Параметры
| tss_key | - | указатель на область памяти для хранения нового ключа потокового хранилища |
| destructor | - | указатель на функцию для вызова при завершении потока |
Примечания
Эквивалентом этой функции в POSIX является
pthread_key_create
.
Возвращаемое значение
thrd_success если успешно, thrd_error в противном случае.
Пример
|
Этот раздел не завершён
Причина: улучшить, возможно поискать примеры из POSIX для вдохновения |
int thread_func(void *arg) { tss_t key; if (thrd_success == tss_create(&key, free)) { tss_set(key, malloc(4)); // сохраняет указатель в TSS // ... } } // вызывает free() для указателя, сохраненного в TSS
Ссылки
- Стандарт C17 (ISO/IEC 9899:2018):
-
- 7.26.6.1 Функция tss_create (стр: 281-282)
- Стандарт C11 (ISO/IEC 9899:2011):
-
- 7.26.6.1 Функция tss_create (стр: 386)