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 в противном случае.
Пример
int thread_func(void *arg) {
tss_t key;
if (thrd_success == tss_create(&key, free)) {
tss_set(key, malloc(4)); // stores a pointer on TSS
// ...
}
} // calls free() for the pointer stored on 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)
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/thread/tss_create