tss_delete
| Definiert im Header <threads.h> |
||
| void tss_delete( tss_t tss_id ); |
(seit C11) | |
Zerstört den durch tss_id identifizierten Thread-spezifischen Speicher.
Der Destruktor, falls er von tss_create registriert wurde, wird nicht aufgerufen (er wird nur beim Beenden des Threads aufgerufen, entweder durch thrd_exit oder durch Rückgabe aus der Thread-Funktion). Es liegt in der Verantwortung des Programmierers sicherzustellen, dass jeder Thread, der von tss_id Kenntnis hat, 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, wird der zu tss_id gehörende Destruktor auf diesem Thread nicht erneut ausgeführt.
Inhalt |
[bearbeiten] Parameter
| tss_id | - | Schlüssel für Thread-spezifischen Speicher, der zuvor von tss_create zurückgegeben wurde und noch nicht von tss_delete gelöscht wurde |
[bearbeiten] Rückgabewert
(keine)
[bearbeiten] Hinweise
Das POSIX-Äquivalent dieser Funktion ist pthread_key_delete.
Der Grund, warum tss_delete niemals Destruktoren aufruft, ist, dass die Destruktoren (die beim Beenden des Threads aufgerufen werden) normalerweise von demselben Thread ausgeführt werden sollen, der den Wert ursprünglich gesetzt hat (über tss_set), mit dem der Destruktor umgeht, und sogar von den Werten dieses oder anderer Thread-spezifischer Daten abhängen können, 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 Wert jedes Threads, der mit tss_id verbunden ist, aufzurufen, müsste tss_delete mit jedem Thread synchronisieren, nur um zu prüfen, ob der Wert dieses TSS in diesem Thread null ist (Destruktoren werden nur für Nicht-Null-Werte aufgerufen).
[bearbeiten] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[bearbeiten] Referenzen
- C17-Standard (ISO/IEC 9899:2018)
- 7.26.6.2 The tss_delete function (S. 282)
- C11-Standard (ISO/IEC 9899:2011)
- 7.26.6.2 The tss_delete function (S. 386)