Spec-Zone.ru › C

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API