Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Глобальные переменные и OpenMP


Автор: AndrewMT 31.5.2012, 10:38
Уважаемые коллеги! Помогите со следующим вопросом....

Долго и упорно переписывал большой проект с Delphi на С++

(использую QT с компилятором от MS VC++ ), переписал, отладил...

Пришло время распараллеливания... Решил использовать OpenMP,

чтобы сильно не "курочить" программу - в ней десятки программных модулей,

 сотни глобальных переменных  - писали разные люди (математики), собирали код

лет 15...

И вот столкнулся со следующим - при распараллеливании самого "напряжённого" участка

потребовалось некоторые глобальные переменные сделать как threadprivate,

они через кучу ссылок (через разные модули), в h-нике объявлены как extern.

Так вот - в доках нарыл, что директиву threadprivate необходимо применять в каждом

юните, где используются оные глобальные перменные, и получается, что компилятор

ругается, если эта директива применяется в тех юнитах, в которых подключен h-ник, в котором объявлены (extern-ном) эти глобальные переменные.

Как быть?... Может, кто-нибудь сталкивался с такой проблемой?...

Автор: boostcoder 31.5.2012, 10:42
Цитата(AndrewMT @  31.5.2012,  10:38 Найти цитируемый пост)
Как быть?

глобальные переменные - зло!
избавляйся от них.

Автор: AndrewMT 31.5.2012, 10:47
Да я сразу говорил предыдущим авторам данного творения, что глобальные переменные - зло. Но уже деваться некуда, такое понаворотили....

Добавлено через 9 минут и 29 секунд
Добавлю, что нечто подобное наблюдалось в GCC, но этот баг был исправлен ещё в 2005 году. А вот как с компилятором MSVC++ - не знаю....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)