【问题标题】:What is the current state of support for 'thread_local' across platforms?跨平台的“thread_local”支持的当前状态是什么?
【发布时间】:2015-06-06 14:43:47
【问题描述】:

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

我对常见的桌面和移动平台特别感兴趣。我能找到的信息充其量似乎是参差不齐的,有报道称它在某些平台上运行而不是在其他平台上运行,或者提到支持是 WIP。欢迎提供确认支持(或缺乏支持)的答案,即使对于单个平台也是如此。如果有任何关于支持的警告,请提及。

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

【问题讨论】:

    标签: c++ c++11 visual-c++ gcc clang


    【解决方案1】:

    作为对其他出色答案的补充:MSVC 2013 目前不支持它。

    这个page on support of core language features 声称它得到部分支持。但是,查看细节似乎是:

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

    它在 MSVC 2014 CTP 3 中实现(自 2014 年夏季开始;请参阅 blog entry)并在 MSVS2015 中提供。

    【讨论】:

      【解决方案2】:

      对于clang,可以查看C++11 implementation status

      语言特性:线程本地存储
      C++11 提案:N2659
      在 Clang 中可用? Clang 3.3

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

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

      【讨论】:

      • 目前 Xcode 7 中用于 iOS 目标的 Clang 不支持 thread_local - devforums.apple.com/message/1079348#1079348 所以我不确定为什么这被标记为正确。
      • 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。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-14
      • 2010-09-07
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      • 2017-11-15
      相关资源
      最近更新 更多