Namespaces
Variants

tss_create

From cppreference.net
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

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)