我找不到任何函数/宏可以告诉我 __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__
准确地反射(reflect)了编译器的真实功能,这在历史上是......不明智的。
我通常会推荐Autoconf在这一点上,但它似乎没有现成的测试来检测这些,如果您以前从未使用 Autoconf 做过任何事情,那么这可能不是开始的地方。抱歉,我无法提供更多帮助。
关于检查__thread关键字是否可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25705190/