检查__thread关键字是否可用

标签 c multithreading keyword

我找不到任何函数/宏可以告诉我 __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/

相关文章:

Android - 线程正在破坏应用程序

Java 在线程终止后检查特定条件

c - 与 pthreads 不一致的运行时

C++ 模板默认构造函数

c - 为什么这个 makefile 不适用于所有对象?

将字符串中的各个字符转换为一行上的 ASCII 值,C

c - 写程序在服务器上运行,求有经验的指点

c++ - 内存分配和 **argv 参数

regex - 匹配关键字数组中的属性字符串

python - 目前该功能应该采用 1 个必需参数和 2 个选项....如何修复?