2010-05-26 2 views
10

Я занимаюсь библиотекой, которая широко использует локальную переменную потока. Можете ли вы указать на некоторые тесты, которые проверяют выступления различных способов получить резьбу накидных локальные переменные в C++:Знаете ли вы о некоторых тестах производительности разных способов получить локальное хранилище потоков на C++?

  • C++ 0x thread_local переменные
  • расширение компилятора (Gcc __thread, ...)
  • повышение :: threads_specific_ptr
  • нитей
  • Окна
  • ...

Действительно ли C++ 0x thread_local работает намного лучше на компиляторах, предоставляющих его?

+0

Я не делал никаких тестов, но я был бы удивлен, если бы они были скомпилированы для разных вещей (с возможным исключением pthread <--> Windows), то есть раздел исполняемого файла, помеченный как поток локальный. –

+0

Любое заключение к этому вопросу? –

ответ

1

Вы всегда можете использовать time.h. Его твой друг при тестировании производительности и ничего больше не доступен.

+0

То, что я ищу, является эталоном использования в разных контекстах. Конечно, я могу сделать это сам, но я бы предпочел использовать его, если он существует. Возможно, вас интересует Boost.Chrono :) –

1

Обычно они реализуются как простое смещение в массиве в пространстве частной памяти потока. Таким образом, доступ к нитку конкретной переменной X, типа T,

T y = X; 

примерно переводится,

T y = *(T*)(cur_thread.local_tbl[key_X]); 

, который слишком прост, чтобы ожидать значительные различия в производительности между реализациями. Тем не менее, если вы найдете какие-то такие ориентиры, пожалуйста, проследите здесь.

+1

Текущая реализация Boost не так проста, так как ключ является адресом переменной thread_specific_pointer. Компиляторы теперь могут использовать ключи во время компиляции и могут делать некоторые оптимизации. Поэтому я ожидаю широкого различия между доступными реализациями, которые могут быть определяющими для библиотек, которые глубоко используют хранилище, специфичное для потоков. –