Namespaces
Variants

tss_delete

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