Namespaces
Variants

tss_create

From cppreference.net
헤더 파일에 정의됨 <threads.h>
int tss_create ( tss_t * tss_key, tss_dtor_t destructor ) ;
(C11 이후)

새로운 스레드별 저장소 키를 생성하고 이를 tss_key 가 가리키는 객체에 저장합니다. 동일한 키 값이 서로 다른 스레드에서 사용될 수 있지만, tss_set 에 의해 키에 바인딩된 값들은 스레드별로 유지되며 호출 스레드의 수명 동안 지속됩니다.

NULL 은 새로 생성된 키와 관련하여 모든 기존 스레드에서 연관되며, 스레드 생성 시 모든 TSS 키와 연관된 값은 NULL 로 초기화됩니다.

만약 destructor 가 null 포인터가 아니라면, 해당 소멸자를 thrd_exit 에 의해 스토리지가 해제될 때 호출되는 소멸자와도 연관시킵니다 (단, tss_delete 에 의한 경우나 exit 에 의한 프로그램 종료 시에는 호출되지 않습니다).

스레드별 저장소 소멸자 내에서 tss_create 를 호출하면 정의되지 않은 동작이 발생합니다.

목차

매개변수

tss_key - 새로운 스레드별 저장소 키를 저장할 메모리 위치에 대한 포인터
destructor - 스레드 종료 시 호출할 함수에 대한 포인터

참고 사항

이 함수의 POSIX에 상응하는 것은 pthread_key_create 입니다.

반환값

thrd_success 성공한 경우, thrd_error 그렇지 않은 경우.

예제

int thread_func(void *arg) {
    tss_t key;
    if (thrd_success == tss_create(&key, free)) {
        tss_set(key, malloc(4)); // TSS에 포인터를 저장
        // ...
    }
} // TSS에 저장된 포인터에 대해 free()를 호출

참고문헌

  • C17 표준 (ISO/IEC 9899:2018):
  • 7.26.6.1 tss_create 함수 (p: 281-282)
  • C11 표준 (ISO/IEC 9899:2011):
  • 7.26.6.1 The tss_create 함수 (p: 386)