2015-04-01 1 views
11

Vorrei un riepilogo di ciò che lo stato corrente del supporto per la parola chiave 'thread_local' è su diversi compilatori e piattaforme.Qual è lo stato corrente del supporto per "thread_local" tra le piattaforme?

Sono specificamente interessato alle piattaforme desktop e mobili comuni. Le informazioni che sono riuscito a trovare sembrano chiazzate al meglio con resoconti su alcune piattaforme e non su altre o su menzioni di supporto come WIP. Le risposte che confermano il supporto (o la mancanza di supporto) anche per le singole piattaforme sono benvenute. Si prega di citare eventuali avvertenze al supporto se ce ne sono.

  • di Windows (gcc, clang, msvc)
  • Linux (gcc, clang)
  • OS X (gcc, clang)
  • Android (gcc, clang)
  • iOS
  • BlackBerry
  • Windows Phone/RT/etc

risposta

3

Per clang, è possibile controllare il C++11 implementation status:

Language Feature: Thread-local storage
C++11 Proposal:N2659
Available in Clang? Clang 3.3

e

Clang 3.3 and later implement all of the ISO C++ 2011 standard . ... thread_local support currently requires the C++ runtime library from g++-4.8 or later.

Si potrebbe anche usare libc++, che è "una completa implementazione del 100% C++ 11 su OS X. Apple"

+0

Attualmente Clang in Xcode 7 per target iOS non supporta thread_local - https://devforums.apple.com/message/1079348#1079348 quindi non sono sicuro del motivo per cui questo è contrassegnato come corretto. – Alexp

+1

'Apple LLVM versione 7.3.0 (clang-703.0.31)' produce questa diagnostica fatale per x86-64: 'errore: l'archiviazione locale del thread non è supportata per il target corrente'. Ma 'Apple LLVM versione 8.1.0 (clang-802.0.42)' sembra gestire 'thread_local' tutto bene, almeno per nativo x86-64. Non so su iOS. – Quuxplusone

7

In complemento all'altra eccellente risposta: MSVC 2013 attualmente non lo supporta.

Questo page on support of core language features afferma che è parzialmente supportato. Tuttavia, guardando i dettagli sembra che:

Thread-local storage is listed as "Partial" because VC has provided the non-Standard extension __declspec(thread) for many years. (Notably, C++11 thread_local supports non-PODs, but __declspec(thread) doesn't.)

E 'implementato in MSVC 2014 CTP 3 (dall'estate 2014; Vedere blog entry) ed è disponibile in MSVS2015.