Уважаемые коллеги! Помогите со следующим вопросом....
Долго и упорно переписывал большой проект с Delphi на С++ (использую QT, пока с компилятором MSVC++ под 64 бита), переписал, отладил... Пришло время распараллеливания... Решил использовать OpenMP, чтобы сильно не "курочить" программу - в ней десятки программных модулей, сотни глобальных переменных - писали разные люди (математики), собирали код лет 15...
И вот столкнулся со следующим - при распараллеливании самого "напряжённого" участка потребовалось некоторые глобальные переменные сделать как threadprivate, они через кучу ссылок (через разные модули), в h-нике объявлены как extern. Не заработало - начались гонки данных.
Так вот - в доках нарыл, что директиву threadprivate необходимо применять в каждом юните, где используются оные глобальные перменные, и получается, что компилятор ругается, если эта директива применяется в тех юнитах, в которых подключен h-ник, в котором объявлены (extern-ном) эти глобальные переменные.
Как быть?... Может, кто сталкивался с таким?... Сразу скажу, что GCC подобный баг был исправлен в 2005 г., а вот MSVC.... (((
|