Подтвердить что ты не робот

Каково текущее состояние поддержки "thread_local" на разных платформах?

Мне хотелось бы получить резюме о том, какое текущее состояние поддержки ключевого слова "thread_local" доступно для разных компиляторов и платформ.

Меня особенно интересуют обычные настольные и мобильные платформы. Информация, которую я мог найти, кажется пятнистой в лучшем случае с сообщениями о том, что она работает на некоторых платформах, а не на других, или упоминания о поддержке, являющейся WIP. Ответы, подтверждающие поддержку (или отсутствие поддержки) даже для отдельных платформ, приветствуются. Пожалуйста, укажите какие-либо оговорки в поддержку, если они есть.

  • Windows (gcc, clang, msvc)
  • Linux (gcc, clang)
  • OS X (gcc, clang)
  • Android (gcc, clang)
  • IOS
  • BlackBerry
  • Windows Phone/RT/etc
4b9b3361

Ответ 1

В дополнение к другому отличному ответу: MSVC 2013 в настоящее время не поддерживает его.

Эта страница для поддержки основных функций языка утверждает, что она частично поддерживается. Однако, глядя на детали, кажется, что:

Локальное хранилище нитей указано как "Частичное", поскольку VC предоставил нестандартное расширение __declspec (поток) в течение многих лет. (Примечательно, что С++ 11 thread_local поддерживает не-POD, но __declspec (thread) не делает.)

Он реализован в MSVC 2014 CTP 3 (с лета 2014 года, см. запись в блоге) и доступен в MSVS2015.

Ответ 2

Для clang вы можете проверить статус реализации С++ 11:

Функция языка: Потоковое локальное хранилище
С++ 11 Предложение: N2659
Доступен в Clang? Clang 3.3

и

Clang 3.3 и более поздние версии реализуют все стандарт ISO С++ 2011.... Для поддержки thread_local в настоящее время требуется библиотека времени выполнения С++ из g++ - 4.8 или новее.

Вы также можете использовать libС++, который является "полной реализацией С++ 11 на Apple OS X".