我想使用__thread存储类将一些变量定义为特定于线程的。但是有三个问题让我犹豫不决:
答案 0 :(得分:5)
回答您的具体问题:
__thread
变量以每个新线程中的初始值开始。在实现C / POSIX之外(例如errno
等),在我看来,线程局部存储类实际上并不是非常有用。它几乎是一个避免以上下文指针或类似形式干净地绕过必要状态的拐杖。您可能认为绕过像qsort
这样不带上下文指针的破坏接口可能很有用,但不幸的是,不能保证qsort
将在调用的同一个线程中调用比较函数qsort
。它可能会破坏作业并在多个线程中运行它。大多数其他接口都可以采用这种解决方法。
答案 1 :(得分:2)
你可能想读这个:
http://www.akkadia.org/drepper/tls.pdf
1)MSVC不支持C99。 GCC和其他编译器都尝试GCC兼容性。
编辑此处提供__thread
的编译器支持细分:
http://chtekk.longitekk.com/index.php?/archives/2011/02/C8.html
2)只有C ++支持初始化程序,它必须是常量。
3)非多线程应用程序是单线程应用程序。