Namespaces
Variants

tss_set

From cppreference.net
Определено в заголовочном файле <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 раз, после чего хранилище будет утеряно.

Пример

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)
читает из поточно-специфичного хранилища
(функция)