Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Общие вопросы по .NET и C# > Использование объектов одного класса в потоках |
Автор: Karrde 27.9.2010, 21:26 |
Вот стало интересно. Если создавать множество потоков, и в каждом отдельно создавать по экземпляру класса(статических методов и переменных нет), то при работе потоков все равно будут конфликты? надо делать синхронизацию? ещё дело осложняется тем, что присутствует длл, к которой идет обращение из методов этого класса. Можно ли сделать полностью независимую друг от друга работу потоков? |
Автор: Skynin 27.9.2010, 21:45 |
Синхронизировать нужно только обращение к одному на всех ресурсу. В данном случае - место обращения к dll |
Автор: mihryak 27.9.2010, 21:52 |
синхронизировать надо только общие для всех потоков ресурсы, т.е. если у тебя в каждом потоке по экземпляру класса, и один поток не обращается никак к другому за ним, то и синхронизация не нужна про длл, не видя её кода, сказать ничего нельзя, если потоки обращаются к функции, у которой есть, к примеру, статический счётчик, то этот счётчик и будет тем самым общим ресурсом, доступ к которому необходимо синхронизировать т.е., чтобы работа потоков не зависила друг от друга, нужно избавиться от общих ресурсов, а такие задачи встречаются совсем редко (только в тех случаях, наверное, когда достаточно запустить поток-задачу, и наплевать, каков будет её результат) Добавлено через 1 минуту и 43 секунды а почему так категорично? (писал свой ответ, когда топик состоял из одного вопроса) Добавлено через 12 минут и 42 секунды в догонку про длл - по-хорошему, она уже должна быть потокобезопасной, т.е. все необходимые для её корректной работы синхронизации уже должны быть внутри |
Автор: Karrde 27.9.2010, 22:18 | ||
Хммм. проблема в том, что длл-сторонняя, и заглянуть в код к ней нет никакой возможности
Т.е. ты имеешь в виду, что код без статических счетчиков встречается редко?(( т.е. не прокатит?( Просто дело в том, что именно функции этой длл очень долго выполняются, а учитывая что надо будет одновременно обрабатывать по несколько клиентов(в клиент-серверном приложении), то последний клиент своей инфы при последовательном выполнении в одном потоке может и не дождаться. А так-шанс есть)) поэтому желательно параллельное выполнение функций этой длл независимо друг друга. Но похоже, там все таки есть какие то общие для всей длл-ки ресурсы(не факт, что статические, мот быть просто private структуры, вынесенные за пределы методов). Есть ли шанс это как нить распараллелить? |
Автор: Karrde 27.9.2010, 22:46 | ||
Логично)) ну тут уже кодом полностью управляю я, и с синхронизацией разберусь. делегаты тут, думаю, сработают неплохо. Главное, чтобы результаты длл-ка правильные выдавала) Длл-ка написана на c++(native). В общем, похоже, хватит мне уже тут теоретизировать, надо попробовать и посмотреть, что и как будет выдавать. Спасибо за помощь)) |
Автор: userdab 27.9.2010, 23:49 |
http://social.msdn.microsoft.com/Forums/ru-RU/windowsru/thread/0ac28a8a-b3ff-44e4-a001-af7af24df96f#2796d0bb-5bdf-4831-b2bc-2d9fee5eb779 |