tss_set
|
Определено в заголовочном файле
<threads.h>
|
||
|
int
tss_set
(
tss_t
tss_id,
void
*
val
)
;
|
(начиная с C11) | |
Устанавливает значение для хранилища данных, специфичного для потока, идентифицируемого с помощью
tss_id
, равным
val
для текущего потока. Разные потоки могут устанавливать разные значения для одного и того же ключа.
Деструктор, если доступен, не вызывается.
Содержание |
Параметры
| tss_id | - | ключ потокового хранилища, полученный из tss_create и не удалённый tss_delete |
| val | - | значение для установки в потоковое хранилище |
Возвращаемое значение
thrd_success если успешно, thrd_error в противном случае.
Примечания
Эквивалентом этой функции в POSIX является
pthread_setspecific
.
Обычно TSS используется для хранения указателей на блоки динамически выделенной памяти, которые зарезервированы для использования вызывающим потоком.
tss_set
может быть вызван в деструкторе TSS. Если деструктор завершится с ненулевым значением в хранилище TSS, он будет повторен
thrd_exit
до
TSS_DTOR_ITERATIONS
раз, после чего хранилище будет утеряно.
Пример
|
Этот раздел не завершён
Причина: улучшить, возможно поискать примеры из 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.4 Функция tss_set (стр: 282-283)
- Стандарт C11 (ISO/IEC 9899:2011):
-
- 7.26.6.4 Функция tss_set (стр: 387)
Смотрите также
|
(C11)
|
читает из поточно-специфичного хранилища
(функция) |