tss_create
| Definiert im Header <threads.h> |
||
| int tss_create( tss_t* tss_key, tss_dtor_t destructor ); |
(seit C11) | |
Erstellt einen neuen Key für Thread-spezifischen Speicher und speichert ihn in dem Objekt, auf das von tss_key gezeigt wird. Obwohl derselbe Key-Wert von verschiedenen Threads verwendet werden kann, werden die Werte, die mit dem Key durch tss_set gebunden sind, auf Pro-Thread-Basis verwaltet und bleiben für die Lebensdauer des aufrufenden Threads bestehen.
Der Wert NULL wird mit dem neu erstellten Key in allen vorhandenen Threads assoziiert, und bei der Thread-Erstellung werden die mit allen TSS-Keys assoziierten Werte auf NULL initialisiert.
Wenn destructor kein Nullzeiger ist, wird auch der Destruktor assoziiert, der aufgerufen wird, wenn der Speicher von thrd_exit freigegeben wird (aber nicht von tss_delete und nicht bei Programmbeendigung durch exit).
Ein Aufruf von tss_create innerhalb eines Destruktors für Thread-spezifischen Speicher führt zu undefiniertem Verhalten.
Inhalt |
[bearbeiten] Parameter
| tss_key | - | Zeiger auf den Speicherort, an dem der neue Key für Thread-spezifischen Speicher gespeichert werden soll |
| Destruktor | - | Zeiger auf eine Funktion, die beim Beenden des Threads aufgerufen werden soll |
[bearbeiten] Anmerkungen
Das POSIX-Äquivalent dieser Funktion ist pthread_key_create.
[bearbeiten] Rückgabewert
thrd_success bei Erfolg, thrd_error andernfalls.
[bearbeiten] Beispiel
| Dieser Abschnitt ist unvollständig Grund: Verbessern, vielleicht POSIX-Beispiele zur Inspiration suchen |
int thread_func(void *arg) { tss_t key; if (thrd_success == tss_create(&key, free)) { tss_set(key, malloc(4)); // stores a pointer on TSS // ... } } // calls free() for the pointer stored on TSS
[bearbeiten] Referenzen
- C17-Standard (ISO/IEC 9899:2018)
- 7.26.6.1 The tss_create function (S. 281-282)
- C11-Standard (ISO/IEC 9899:2011)
- 7.26.6.1 The tss_create function (S. 386)