Namespaces
Variants

tss_delete

From cppreference.net
Definiert im Header <threads.h>
void tss_delete ( tss_t tss_id ) ;
(seit C11)

Zerstört den threadspezifischen Speicher, der durch tss_id identifiziert wird.

Der Destruktor, falls einer durch tss_create registriert wurde, wird nicht aufgerufen (sie werden nur beim Thread-Ende aufgerufen, entweder durch thrd_exit oder durch Rückkehr aus der Thread-Funktion). Es liegt in der Verantwortung des Programmierers sicherzustellen, dass jeder Thread, der tss_id kennt, alle notwendigen Bereinigungen durchgeführt hat, bevor der Aufruf von tss_delete erfolgt.

Wenn tss_delete aufgerufen wird, während ein anderer Thread Destruktoren für tss_id ausführt, ist es nicht spezifiziert, ob dies die Anzahl der Aufrufe des zugehörigen Destruktors ändert.

Wenn tss_delete aufgerufen wird, während der aufrufende Thread Destruktoren ausführt, dann wird der Destruktor, der mit tss_id assoziiert ist, in diesem Thread nicht erneut ausgeführt.

Inhaltsverzeichnis

Parameter

tss_id - Thread-spezifischer Speicherschlüssel, der zuvor von tss_create zurückgegeben und noch nicht durch tss_delete gelöscht wurde

Rückgabewert

(keine)

Hinweise

Das POSIX-Äquivalent dieser Funktion ist pthread_key_delete .

Der Grund, warum tss_delete niemals Destruktoren aufruft, ist, dass die Destruktoren (die beim Thread-Ende aufgerufen werden) normalerweise von demselben Thread ausgeführt werden sollen, der ursprünglich den Wert (via tss_set ) gesetzt hat, mit dem der Destruktor arbeiten wird, und möglicherweise sogar von den Werten dieser oder anderer threadspezifischer Daten abhängen, wie sie von diesem Thread gesehen werden. Der Thread, der tss_delete ausführt, hat keinen Zugriff auf den TSS anderer Threads. Selbst wenn es möglich wäre, den Destruktor für den eigenen Wert jedes Threads, der mit tss_id assoziiert ist, aufzurufen, müsste tss_delete mit jedem Thread synchronisieren, allein schon um zu prüfen, ob der Wert dieses TSS in diesem Thread null ist (Destruktoren werden nur für nicht-null Werte aufgerufen).

Beispiel

Referenzen

  • C17-Standard (ISO/IEC 9899:2018):
  • 7.26.6.2 Die tss_delete-Funktion (S: 282)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.26.6.2 Die tss_delete-Funktion (S: 386)