__thread
키워드/기능이 있는지 알려주는 함수/매크로를 찾을 수 없습니다. 예를 들어 __thread 키워드를 사용할 수 있는지 확인하십시오.
HAS_TLS
#if HAS_TLS
static __thread int mytlsdata;
#else
static pthread_key_t mytlskey;
#endif
__thread
키워드/기능이 있는지 알려주는 함수/매크로를 찾을 수 없습니다. 예를 들어 __thread 키워드를 사용할 수 있는지 확인하십시오.
HAS_TLS
#if HAS_TLS
static __thread int mytlsdata;
#else
static pthread_key_t mytlskey;
#endif
유일한 미리 정의 된, 짝수 가깝게 표준 일,
#if __STDC_VERSION__ >= 201112L && !defined __STDC_NO_THREADS__
static _Thread_local int mytlsdata;
#endif
그러나이 정의 사용자없이 이런 일을하고 싶지 등가의 C11 이전 기능을 감지하지 못합니다. 귀하의 __thread
그리고 __STDC_VERSION__
이 컴파일러의 실제 기능을 정확하게 반영한다고 가정하면 역사적으로 현명하지 못합니다.
보통이 시점에서 Autoconf을 권장하지만,이를 감지 할 수있는 기성 테스트가없는 것 같습니다. 그리고 전에 Autoconf로 아무 것도하지 않았다면 이것은 아마도 장소가 아닙니다. 시작한다. 죄송합니다 더 도움이 될 수 없습니다.
키워드를 사용하는 TLS 지원은 컴파일러에 따라 다릅니다. LLVM/clang은 __thread
을 사용하고 VisualC++은 __declspec(thread)
을 사용하지만 C++ Builder는 __thread
과 __declspec(thread)
등을 모두 지원합니다. TLS 키워드를 사용할 수 있는지 또는 실제로 어떤 키워드인지 확인하기위한 사전 컴파일러 매크로는 없습니다. TLS를위한 플랫폼 간 코드를 작성하려면 그에 따라 특정 컴파일러와 코드를 감지해야합니다.
이것은 크게 컴파일러에 따라 다릅니다. 어느 쪽을 사용하고 있습니까? – JustSid
저는 LLVM을 사용하고 있습니다. 하지만 크로스 컴파일러 솔루션을 찾고 있습니다. – d3L