![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Karrde |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 11.11.2006 Репутация: нет Всего: нет |
Вот стало интересно. Если создавать множество потоков, и в каждом отдельно создавать по экземпляру класса(статических методов и переменных нет), то при работе потоков все равно будут конфликты? надо делать синхронизацию? ещё дело осложняется тем, что присутствует длл, к которой идет обращение из методов этого класса. Можно ли сделать полностью независимую друг от друга работу потоков?
|
|||
|
||||
Skynin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: 1 Всего: 10 |
Синхронизировать нужно только обращение к одному на всех ресурсу.
В данном случае - место обращения к dll |
|||
|
||||
mihryak |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
синхронизировать надо только общие для всех потоков ресурсы, т.е. если у тебя в каждом потоке по экземпляру класса, и один поток не обращается никак к другому за ним, то и синхронизация не нужна
про длл, не видя её кода, сказать ничего нельзя, если потоки обращаются к функции, у которой есть, к примеру, статический счётчик, то этот счётчик и будет тем самым общим ресурсом, доступ к которому необходимо синхронизировать т.е., чтобы работа потоков не зависила друг от друга, нужно избавиться от общих ресурсов, а такие задачи встречаются совсем редко (только в тех случаях, наверное, когда достаточно запустить поток-задачу, и наплевать, каков будет её результат) Добавлено через 1 минуту и 43 секунды а почему так категорично? (писал свой ответ, когда топик состоял из одного вопроса) Добавлено через 12 минут и 42 секунды в догонку про длл - по-хорошему, она уже должна быть потокобезопасной, т.е. все необходимые для её корректной работы синхронизации уже должны быть внутри Это сообщение отредактировал(а) mihryak - 27.9.2010, 21:53 |
|||
|
||||
Karrde |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 11.11.2006 Репутация: нет Всего: нет |
Хммм. проблема в том, что длл-сторонняя, и заглянуть в код к ней нет никакой возможности
Т.е. ты имеешь в виду, что код без статических счетчиков встречается редко?(( т.е. не прокатит?( Просто дело в том, что именно функции этой длл очень долго выполняются, а учитывая что надо будет одновременно обрабатывать по несколько клиентов(в клиент-серверном приложении), то последний клиент своей инфы при последовательном выполнении в одном потоке может и не дождаться. А так-шанс есть)) поэтому желательно параллельное выполнение функций этой длл независимо друг друга. Но похоже, там все таки есть какие то общие для всей длл-ки ресурсы(не факт, что статические, мот быть просто private структуры, вынесенные за пределы методов). Есть ли шанс это как нить распараллелить? Это сообщение отредактировал(а) Karrde - 27.9.2010, 22:36 |
|||
|
||||
mihryak |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
нет ![]() ![]() или когда все потоки в процессе свой работы обращаются куда-нибудь за данными - тоже это место подлежит синхронизации
на то есть серьёзные основания? и, вообще, о какой длл идёт речь - .net или обычная? если первое, то можно попробовать рефлектором посмотреть код повторюсь, выдавать наружу потоконебезопасные методы - дурной тон, так быть не должно, и, что скорее всего, можно вызывать без опасений |
||||
|
|||||
Karrde |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 11.11.2006 Репутация: нет Всего: нет |
Логично)) ну тут уже кодом полностью управляю я, и с синхронизацией разберусь. делегаты тут, думаю, сработают неплохо. Главное, чтобы результаты длл-ка правильные выдавала) Длл-ка написана на c++(native). В общем, похоже, хватит мне уже тут теоретизировать, надо попробовать и посмотреть, что и как будет выдавать. Спасибо за помощь)) |
|||
|
||||
userdab |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 3.9.2010 Репутация: нет Всего: нет |
||||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |