Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> dll со статическими данными в нескольких потоках 
:(
    Опции темы
borisbn
Дата 4.8.2010, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Имеется: dll-ка. НЕ МОЯ. Исправить её я не могу ( вариант с дизассемблированием, исправлением и компиляцией masm'ом не предлагать ). В этой dll-ке есть пара функций, которые я resolv'лю динамически. При вызове этих функций из одного потока всё работает как надо. Когда же я вызываю их из разных потоков, то результаты что в одном, что в другом потоке неправильные. Я предположил, что в этих dll-ках есть статические данные, в которых сохраняется состояние между вызовами. Решил проблему так: в каждом потоке переименовываю файл dll с другим именем ( например, адрес класса потока ), и загружаю полученную копию. Решение не идеальное, но работает.
Вопрос: как это сделать лучше/правильнее/красивее. Нужное подчеркнуть smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
HellStranger
Дата 4.8.2010, 16:18 (ссылка)   | (голосов:7) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 1.9.2009

Репутация: -2
Всего: -1



Как мы разграничиваем доступ разных потоков к разделяемым данным?.. Правильно! Критические секции, мьютексы и семафоры. Джефри Рихтер ещё супер-пупер объект обтекс разработал в своей книге "Создание эффективных Win32-приложений с учётом специфики 64-разрядной версии Windows" на базе семафоров. Теперь полагаем, что разделяемые данные- это вызов функций из кривоватых DLL, и проблема решена. Ну а что из описанных средств и как применять- это уже вам виднее...

Добавлено через 50 секунд
Цитата(borisbn @  4.8.2010,  15:59 Найти цитируемый пост)
Женщины отличаются от программистов тем, что у них чары состоят из стрингов


Блин, жжжёшь собака...  smile 
PM MAIL   Вверх
Abyx
Дата 4.8.2010, 17:49 (ссылка) |   (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



HellStranger, вы ничего не понимаете в программировании, перестаньте уже писать всякий бред.


borisbn написал что у него проблема в глобальном состоянии, а не в одновременном вызове функций из нескольких потоков.

Добавлено через 6 минут и 21 секунду
как _лучше_ решить эту проблему я уже писал.

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

Нужно либо реализовать механизм copy-on-write чтобы избежать лишних копирований,
либо минимизировать копирования использовав свой загрузчик длл, который будет выборочно копировать куски из длл,
либо написать свою длл с той же функциональностью
PM MAIL   Вверх
boostcoder
Дата 4.8.2010, 18:11 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(Abyx @  4.8.2010,  17:49 Найти цитируемый пост)
HellStranger, вы ничего не понимаете в программировании, перестаньте уже писать всякий бред.

вряд ли он понимает это..
borisbn, что выполняет длл-ка? что из нее "торчит"? возможно получится использовать "хуки", или перехватить "торчащие" из не функции/методы..

Добавлено через 24 секунды
и где вы эту длл-ку взяли?
PM WWW   Вверх
jonie
Дата 4.8.2010, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



ну как вариант сделать маршалинг в один поток входящих потоков. Т.е. делаем один поток, который работает с ДЛЛ, вида while(true){ стоим на семафоре; смотрим очередь "что делать"; делаем; отдаем результат; бросаем семафор.}

Можно маршалить как делает COM - через оконную очередь сообщений.... - кстати можно обернуть всю работу в COM классе, сделав его в модели STA и вообще забить - пусть сам COM разруливает маршалинг

Это сообщение отредактировал(а) jonie - 4.8.2010, 21:33


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
MAKCim
Дата 4.8.2010, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



HellStranger
все правильно написал

если два раза вызываем функу в однопоточном приложении, все же нормально, правильно...отсюда делаем вывод


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
borisbn
Дата 5.8.2010, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



HellStrangerjonieMAKCim, вариант с локированием ничем ( практически ) не отличается от однопоточного приложения. Мне нужно распараллелить вычисления, которые должны проводиться над разными данными для разных потоков.

Abyx, в моей задаче количество запускаемых потоков равно количеству ядер процессора, размер одной dll-ки 200 КБ ( на диске, в памяти - не знаю ), поэтому не вижу смысла делать свой загрузчик для экономии 0,5 ... 1 МБ памяти на сервере, на котором стоит 4 ГБ.

boostcoder, dll-ка выполняет фильтрацию сигнала каким-то хитрым БИХ-фильтром с неизвестной мне ИХ. dll-ка наша, но такой давности, что, к сожалению, исходников нийти не удалось. А писал её не программист, а математик, отсюда и проблема. А "торчат" из неё две функции init и filter.

P.S. Дело в том, что на данный момент меня всё устраивает. Я не могу понять, почему все участники считают, что это самое кривое решение из всех возможных ?

Это сообщение отредактировал(а) borisbn - 5.8.2010, 08:29


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Abyx
Дата 5.8.2010, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



borisbn, так сразу и сказали бы, что там 2-4 копии
PM MAIL   Вверх
borisbn
Дата 5.8.2010, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Abyx, пардон, что не сказал. А копий - 8.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Dem_max
Дата 5.8.2010, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



А как часто вызывается функция filter ? и какое время она работает ?

Может все таки стоит узнать что за фильтр такой и заного написать его. 


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
borisbn
Дата 5.8.2010, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Dem_max, фильтр удаления низкочастотных шумов из записей. Понимаешь, эта функция ( вернее эта dll-ка ) меня полностью устраивает, и решение переписать или найти подобное и исправить под свои нужды IMHO ничем не лучше, чем то что я сделал.
Честно говоря, мы уже закончили работу над этим проектом и сдали заказчику. Я просто хотел узнать на будущее, есть ли более простое и быстрое решение этой проблемы, чем это брутальное, но работающее smile



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
borisbn
Дата 7.8.2010, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(HellStranger @  4.8.2010,  16:18 Найти цитируемый пост)
Цитата(borisbn @  4.8.2010,  15:59 )Женщины отличаются от программистов тем, что у них чары состоят из стринговБлин, жжжёшь собака...   

мне у [B]W4FhLF[/B] даже больше нравится


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1104 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.