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


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

我对常见的桌面和移动平台特别感兴趣。我可以找到的信息充其量只是报告它在某些平台上工作而不是在其他平台上工作或者提到支持是WIP。我们欢迎即使对于单一平台也能确认支持(或缺乏支持)的答案。如果有任何问题,请提及支持的任何警告。

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

6112
2018-04-01 19:47


起源



答案:


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

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

线程本地存储被列为“部分”,因为VC提供了   该 非标准扩展 __declspec(线程)多年。   (值得注意的是,C ++ 11 thread_local支持非POD,但是__declspec(线程)   没有。)

它在MSVC 2014 CTP 3中实施(自2014年夏季开始;参见 博客文章)并可用于 MSVS2015


7
2018-04-02 23:23





对于 clang,你可以检查一下 C ++ 11实现状态

语言特色: 线程本地存储
C ++ 11提案:  N2659
Clang有售吗? Clang 3.3

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

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


3
2018-04-01 20:04



目前,针对iOS目标的Xcode 7中的Clang不支持thread_local - devforums.apple.com/message/1079348#1079348 所以我不确定为什么这被标记为正确。 - Alexp
Apple LLVM version 7.3.0 (clang-703.0.31) 为x86-64生成这个致命的诊断: error: thread-local storage is not supported for the current target。但 Apple LLVM version 8.1.0 (clang-802.0.42) 似乎处理 thread_local 好吧,至少对于原生的x86-64。我不知道iOS。 - Quuxplusone


答案:


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

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

线程本地存储被列为“部分”,因为VC提供了   该 非标准扩展 __declspec(线程)多年。   (值得注意的是,C ++ 11 thread_local支持非POD,但是__declspec(线程)   没有。)

它在MSVC 2014 CTP 3中实施(自2014年夏季开始;参见 博客文章)并可用于 MSVS2015


7
2018-04-02 23:23





对于 clang,你可以检查一下 C ++ 11实现状态

语言特色: 线程本地存储
C ++ 11提案:  N2659
Clang有售吗? Clang 3.3

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

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


3
2018-04-01 20:04



目前,针对iOS目标的Xcode 7中的Clang不支持thread_local - devforums.apple.com/message/1079348#1079348 所以我不确定为什么这被标记为正确。 - Alexp
Apple LLVM version 7.3.0 (clang-703.0.31) 为x86-64生成这个致命的诊断: error: thread-local storage is not supported for the current target。但 Apple LLVM version 8.1.0 (clang-802.0.42) 似乎处理 thread_local 好吧,至少对于原生的x86-64。我不知道iOS。 - Quuxplusone