Сейчас на форуме: jinoweb (+4 невидимых)

 eXeL@B —› Программирование —› Потоконебезопасная библиотека и многопоточное приложение
Посл.ответ Сообщение


Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 18 марта 2016 23:49
· Личное сообщение · #1

Привет, ребята.

Ситуация. Есть библиотека (статическая - lib), написанная на Си, которая потокоНЕбезопасна. Кроме того, есть приложение, которое должно в потоках вызывать один метод этого приложения.

Код библиотеки есть, но библиотека коммерческая и достаточно обширная, поэтому править ее очень не хотелось бы - работы на месяцы.

Как вы считаете, какие есть выходы, чтобы совершать потокобезопасные вызовы метода?

- Можно сделать много процессов, но пострадает быстродействие


Если все-таки вы порекомендуете превратить библиотеку в потокобезопасную, то хотелось бы узнать, какие, кроме статических переменных, глобальных переменных, указателей на захардкоженные адреса памяти, есть факторы, которые могут нарушить потокобезопасность?

Спасибо заранее.

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 19 марта 2016 00:27 · Поправил: ajax
· Личное сообщение · #2

"обертки" сделать вида
Code:
  1. lea     rcx, CriticalSection
  2. call    EnterCriticalSection
  3. call    required_proc
  4. lea     rcx, CriticalSection
  5. call    LeaveCriticalSection


-----
От многой мудрости много скорби, и умножающий знание умножает печаль





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 19 марта 2016 00:27 · Поправил: Модератор
· Личное сообщение · #3

Зачем процессов много? Воткнуть критическую секцию на вызов метода, не?
З.Ы. Опередили.




Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 19 марта 2016 01:04
· Личное сообщение · #4

ajax, Archer, метод довольно долго обрабатывает данные (порядка 10-15 секунд). Я это не упомянул, но это может стать препятствием (наверное?).

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 19 марта 2016 01:21
· Личное сообщение · #5

Ну пока 1 поток считает, остальные будут ждать. В чём препятствие-то? Зато потокобезопасно.
Либо разные процессы, будут потоки работать параллельно.
Либо переписывать либу, чтоб потоки работали параллельно без проблем.



Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 19 марта 2016 01:44
· Личное сообщение · #6

Еще можно наделать несколько копий этой либы в виде DLL.




Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 19 марта 2016 02:04
· Личное сообщение · #7

Crawler
А вызываются из методов какие-нибудь апи? Если много общих вызовов, то можно хукнуть функи и обернуть в крит.секции )

Добавлено спустя 1 минуту
Хотя не вариант, если используются глобальные переменные внутри

-----
IZ.RU





Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 19 марта 2016 02:17
· Личное сообщение · #8

Archer, да, будет потокобезопасно. Жаль, пострадает производительность - смысл как раз был в том, чтобы использовать несколько потоков.

Пока оставлю тему открытой, напишу, какое нашлось решение.

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 19 марта 2016 08:19
· Личное сообщение · #9

Crawler
несколько мини-exe, с запуском на конкретное ядро. больше пока мыслей нет

-----
От многой мудрости много скорби, и умножающий знание умножает печаль





Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 19 марта 2016 11:42
· Личное сообщение · #10

а если вручную несколько раз загрузить либу в свое АП? по разной базе 1 либа = 1 поток.
хотя смысл сомнителен, можно и мини-ехе запилить в нужном количестве.

-----
[nice coder and reverser]



 eXeL@B —› Программирование —› Потоконебезопасная библиотека и многопоточное приложение
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати