Подводные камни Thread Local Storage
От: Nuzik Россия  
Дата: 15.09.10 13:40
Оценка:
Добрый день!

Пусть имеется файл A.c, в котором реализована некоторая функция A(...). Код был написан в начале 90х годов и использует большое количество глобальных переменных уровня модуля A.c (static blabla tralala).

Теперь возникла необходимость использовать функцию A(...) из нескольких потоков. Я поместил все глобальные переменные в Thread Local Storage (модификатор __declspec(thread) в VC++).

Вопрос: какие подводные камни несет в себе TLS? Будет ли заметка какая-либо существенная деградация производительности в сравнении с вариантом, когда я рефакторю код так, чтобы глобальные переменные не использовались?

Спасибо!
thread local storage
Re: Подводные камни Thread Local Storage
От: ononim  
Дата: 15.09.10 13:43
Оценка:
N>Теперь возникла необходимость использовать функцию A(...) из нескольких потоков. Я поместил все глобальные переменные в Thread Local Storage (модификатор __declspec(thread) в VC++).
N>Вопрос: какие подводные камни несет в себе TLS? Будет ли заметка какая-либо существенная деградация производительности в сравнении с вариантом, когда я рефакторю код так, чтобы глобальные переменные не использовались?
Ваш класс нельзя будет использовать в динамически загружаемых длл до висты.
По производительности врядли чтото заметите.
Как много веселых ребят, и все делают велосипед...
Re: Подводные камни Thread Local Storage
От: Мишень-сан  
Дата: 15.09.10 14:10
Оценка:
Здравствуйте, Nuzik, Вы писали:

N>Добрый день!


N>Пусть имеется файл A.c, в котором реализована некоторая функция A(...). Код был написан в начале 90х годов и использует большое количество глобальных переменных уровня модуля A.c (static blabla tralala).


N>Теперь возникла необходимость использовать функцию A(...) из нескольких потоков. Я поместил все глобальные переменные в Thread Local Storage (модификатор __declspec(thread) в VC++).


N>Вопрос: какие подводные камни несет в себе TLS? Будет ли заметка какая-либо существенная деградация производительности в сравнении с вариантом, когда я рефакторю код так, чтобы глобальные переменные не использовались?


N>Спасибо!


Вашу DLL нельзя будет загружать ч-з LoadLibrary.
Re[2]: Подводные камни Thread Local Storage
От: Nuzik Россия  
Дата: 15.09.10 14:17
Оценка:
Здравствуйте, Мишень-сан, Вы писали:

МС>Вашу DLL нельзя будет загружать ч-з LoadLibrary.


Это не страшно, у меня не DLL, а просто .exe
Re: Подводные камни Thread Local Storage
От: x905  
Дата: 16.09.10 06:37
Оценка:
Здравствуйте, Nuzik, Вы писали:

N>Теперь возникла необходимость использовать функцию A(...) из нескольких потоков. Я поместил все глобальные переменные в Thread Local Storage (модификатор __declspec(thread) в VC++).


а не проще было бы написать обертку типа A_Th(...), в которой был бы scoped мьютекс на входе ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.