Namespaces
Variants

tss_create

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

Пример

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)