Может ли static combinable <T>использоваться в качестве заполнителя для thread_local? - PullRequest
1 голос
/ 11 августа 2010

C ++ 0x добавляет новый спецификатор хранилища thread_local, который еще не реализован в VS10.

Однако библиотека параллельного программирования определяет Concurrency::combinable класс с функцией local(), которая возвращает ссылку на частное вычисление потока .

Есть ли семантика для thread_local, которая не может быть (легко) рассмотренаимея static переменную типа combinable<T>?

Если нет, то почему thread_local был добавлен к базовому языку, если он может быть реализован в библиотеке?

1 Ответ

3 голосов
/ 23 августа 2010

Почему C ++ добавил класс объектов, может ли он быть реализован библиотекой, как то, что GObject делает в C?Поскольку C ++ хочет, чтобы объекты class были известны в время компиляции , это более эффективно.Поэтому инициализация / деинициализация класса C ++ безопасна для исключений ( RAII ).

Некоторые функции являются более важными и требуют большей реализации. thread_local - это спецификатор класса хранения , поэтому он может быть известен в время компиляции , и компилятор может выполнить гораздо большую оптимизацию.

Также вhttp://www.open -std.org / jtc1 / sc22 / wg21 / docs /apers / 2008 / n2659.htm сказал:

Динамическая инициализация переменной потока

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

Почему thread_local были введены как новое ключевое слово языка?Кажется, что причиной может быть Динамическая инициализация переменной потока .

...