跨平台的'thread_local'的当前支持状态是什么?

Pri*_*tic 11 c++ gcc clang visual-c++ c++11

我想要总结一下'thread_local'关键字在不同编译器和平台上的当前支持状态.

我对常见的桌面和移动平台特别感兴趣.我可以找到的信息看起来很不稳定,因为有报道称它在某些平台上工作,而不是在其他平台上工作,或者提到支持是WIP.我们欢迎即使对于单一平台也能确认支持(或缺乏支持)的答案.如果有任何警告,请提供支持的任何警告.

  • Windows(gcc,clang,msvc)
  • Linux(gcc,clang)
  • OS X(gcc,clang)
  • Android(gcc,clang)
  • iOS版
  • 黑莓
  • Windows Phone/RT /等

Chr*_*phe 7

作为另一个优秀答案的补充:MSVC 2013目前不支持它.

这个支持核心语言功能的页面声称它得到部分支持.但是,看看细节看来:

线程本地存储被列为"部分",因为VC多年来一直提供非标准扩展 __declspec(线程).(值得注意的是,C++ 11 thread_local支持非POD,但__declspec(线程)不支持.)

它在MSVC 2014 CTP 3中实现(自2014年夏季开始;参见博客文章),并在MSVS2015中提供.


Car*_*rum 3

对于clang,您可以检查C++11的实现状态

语言功能:线程本地存储
C++11 提案: N2659
在 Clang 中可用吗?铿锵3.3

Clang 3.3 及更高版本实现了所有ISO C++ 2011 标准。... thread_local当前支持需要 g++-4.8 或更高版本的 C++ 运行时库。

您还可以使用libc++,它是“Apple OS X 上 100% 完整的 C++11 实现”。