tss_create
|
Definiert in Header
<threads.h>
|
||
|
int
tss_create
(
tss_t
*
tss_key,
tss_dtor_t
destructor
)
;
|
(seit C11) | |
Erzeugt einen neuen threadspezifischen Speicherschlüssel und speichert ihn in dem Objekt, auf das
tss_key
zeigt. Obwohl derselbe Schlüsselwert von verschiedenen Threads verwendet werden kann, werden die Werte, die durch
tss_set
an den Schlüssel gebunden sind, threadspezifisch verwaltet und bestehen für die Lebensdauer des aufrufenden Threads fort.
Der Wert NULL wird dem neu erstellten Schlüssel in allen existierenden Threads zugeordnet, und bei Thread-Erstellung werden die Werte aller TSS-Schlüssel auf NULL initialisiert.
Wenn der
destructor
kein Nullzeiger ist, wird ebenfalls der Destruktor assoziiert, der aufgerufen wird, wenn der Speicher durch
thrd_exit
freigegeben wird (jedoch nicht durch
tss_delete
und nicht bei Programmbeendigung durch
exit
).
Ein Aufruf von
tss_create
innerhalb eines Thread-spezifischen Speicher-Destruktors führt zu undefiniertem Verhalten.
Inhaltsverzeichnis |
Parameter
| tss_key | - | Zeiger auf den Speicherort zur Speicherung des neuen threadspezifischen Speicherschlüssels |
| destructor | - | Zeiger auf eine Funktion, die beim Thread-Ende aufgerufen wird |
Hinweise
Das POSIX-Äquivalent dieser Funktion ist
pthread_key_create
.
Rückgabewert
thrd_success bei Erfolg, thrd_error andernfalls.
Beispiel
|
Dieser Abschnitt ist unvollständig
Grund: Verbessern, eventuell nach POSIX-Beispielen zur Inspiration suchen |
int thread_func(void *arg) { tss_t key; if (thrd_success == tss_create(&key, free)) { tss_set(key, malloc(4)); // speichert einen Zeiger im TSS // ... } } // ruft free() für den im TSS gespeicherten Zeiger auf
Referenzen
- C17-Standard (ISO/IEC 9899:2018):
-
- 7.26.6.1 Die tss_create-Funktion (S: 281-282)
- C11-Standard (ISO/IEC 9899:2011):
-
- 7.26.6.1 Die tss_create-Funktion (S: 386)