tss_delete
Определено в заголовке <threads.h> |
||
|---|---|---|
void tss_delete( tss_t tss_id ); |
(с C11) |
Уничтожает хранилище данных, специфичное для потока, идентифицируемое как tss_id.
Деструктор, если он был зарегистрирован tss_create, не вызывается (они вызываются только при выходе потока, либо thrd_exit, либо при возвращении из функции потока). Программист обязан убедиться, что каждый поток, который знает о tss_id, выполнил все необходимые операции очистки, прежде чем вызывать tss_delete.
Если tss_delete вызывается, когда другой поток выполняет деструкторы для tss_id, то не определено, изменится ли количество вызовов связанного деструктора.
Если tss_delete вызывается, когда вызывающий поток выполняет деструкторы, то деструктор, связанный с tss_id, не будет повторно выполнен в этом потоке.
Параметры
| tss_id | - | ключ хранилища данных, специфичного для потока, возвращённый ранее tss_create и ещё не удалённый tss_delete |
Возвращаемое значение
(нет)
Примечания
Эквивалентом этой функции в POSIX является pthread_key_delete.
Причина, по которой tss_delete никогда не вызывает деструкторы, заключается в том, что деструкторы (вызываемые при выходе потока) обычно предназначены для выполнения тем же потоком, который изначально задал значение (через tss_set), с которым деструктор будет работать, и могут даже полагаться на значения этого или других данных, специфичных для потока, как их видит этот поток. Поток, выполняющий tss_delete не имеет доступа к данным других потоков. Даже если бы было возможно вызвать деструктор для каждого значения, связанного с tss_id в собственном потоке, tss_delete пришлось бы синхронизироваться с каждым потоком, только для того, чтобы проверить, является ли значение этого TSS в этом потоке нулевым (деструкторы вызываются только для ненулевых значений).
Пример
Ссылки
- Стандарт C17 (ISO/IEC 9899:2018):
- 7.26.6.2 Функция tss_delete (стр. 282)
- Стандарт C11 (ISO/IEC 9899:2011):
- 7.26.6.2 Функция tss_delete (стр. 386)
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/thread/tss_delete