![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
shtuceron |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 17.2.2008 Репутация: нет Всего: нет |
Добрый день.
Скажите как ведет себя реализация паттерна одиночка в многопоточном программировании. Я пишу многопоточное приложение, в котором используется один класс и мне очень не хотелось бы создавать экземпляры этого класса в каждом потоке, поэтому решил воспользоваться паттерном одиночка. Скажите могут ли возникнуть проблемы при использовании одного объекта в нескольких потоках (блокировку через lock я ставлю). И еще вопрос, в классе (одиночка) у меня реализованы события, нужно ли для каждого потока создавать события, которые потоки будут обрабатывать? или достаточно в главном потоке определить события? Спасибо. |
|||
|
||||
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
Встречный вопрос. Какая реализация? Ленивая инициализация НЕ потокобезопасна, но защищать инициализацию через lock идея не из лучших, лишний lock при каждом обращении. Лучше инициализировать в основном потоке, а потом спокойно использовать.
Смотря какое использование. Чтение потокобезопасно, запись из нескольких потоков необходимо защищать через lock. Нет, но не переусердствуй с lock-ами. Вообще старайся сводить их количество к необходимому минимуму. Не понял вопроса. Это сообщение отредактировал(а) azesmcar - 13.4.2012, 09:25 |
||||
|
|||||
shtuceron |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 17.2.2008 Репутация: нет Всего: нет |
Так я и делаю, инициализация проходит в основном потоке. Но если мы используем скажем TCP/IP соединение в разных потоках может возникнуть ситуация одновременной отправки сообщений - следовательно может возникнуть конфликт. Или я не прав? Про события - самые обычные event-ты (например: пришел ответ от сервера - ошибка - я вызываю этот event и он обрабатывается в том потоке, который его реализует)... Если я в разных потоках попытаюсь реализовать события
Они и будут выполняться в разных потоках именно 2 события или только одно события в том потоке который сейчас активен? |
||||
|
|||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
Если сам класс соединения не обеспечивает безопасность - тогда может. ![]() Обрабатывается он в том потоке, из которого вызываешь. |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
вот тут неплохая дока по теме http://www.yoda.arachsys.com/csharp/singleton.html
я только замечу проблему, описанную там отдельно:
почитайте.. -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
jonie
Это же DCLP. Хотя я далеко не любитель этого патерна, тем не менее в .NET этот код рабочий. Модель памяти .NET гарантирует, что любая атомарная операция и любой lock - full memory fence. В данном случае lock (padlock) - это барьер и код вполне рабочий. А почитать стоит ![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |