tss_delete
|
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
|
Dieser Abschnitt ist unvollständig
Grund: Kein 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)