Namensräume
Varianten
Aktionen

tss_create

Von cppreference.com
< c‎ | thread
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

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)