Пусть имеется файл A.c, в котором реализована некоторая функция A(...). Код был написан в начале 90х годов и использует большое количество глобальных переменных уровня модуля A.c (static blabla tralala).
Теперь возникла необходимость использовать функцию A(...) из нескольких потоков. Я поместил все глобальные переменные в Thread Local Storage (модификатор __declspec(thread) в VC++).
Вопрос: какие подводные камни несет в себе TLS? Будет ли заметка какая-либо существенная деградация производительности в сравнении с вариантом, когда я рефакторю код так, чтобы глобальные переменные не использовались?
N>Теперь возникла необходимость использовать функцию A(...) из нескольких потоков. Я поместил все глобальные переменные в Thread Local Storage (модификатор __declspec(thread) в VC++). N>Вопрос: какие подводные камни несет в себе TLS? Будет ли заметка какая-либо существенная деградация производительности в сравнении с вариантом, когда я рефакторю код так, чтобы глобальные переменные не использовались?
Ваш класс нельзя будет использовать в динамически загружаемых длл до висты.
По производительности врядли чтото заметите.
Как много веселых ребят, и все делают велосипед...
Здравствуйте, Nuzik, Вы писали:
N>Добрый день!
N>Пусть имеется файл A.c, в котором реализована некоторая функция A(...). Код был написан в начале 90х годов и использует большое количество глобальных переменных уровня модуля A.c (static blabla tralala).
N>Теперь возникла необходимость использовать функцию A(...) из нескольких потоков. Я поместил все глобальные переменные в Thread Local Storage (модификатор __declspec(thread) в VC++).
N>Вопрос: какие подводные камни несет в себе TLS? Будет ли заметка какая-либо существенная деградация производительности в сравнении с вариантом, когда я рефакторю код так, чтобы глобальные переменные не использовались?
N>Спасибо!
Здравствуйте, Nuzik, Вы писали:
N>Теперь возникла необходимость использовать функцию A(...) из нескольких потоков. Я поместил все глобальные переменные в Thread Local Storage (модификатор __declspec(thread) в VC++).
а не проще было бы написать обертку типа A_Th(...), в которой был бы scoped мьютекс на входе ?