![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Stas123 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
Является ли мои класс потокобезопасным?
Как пергерузить List<T>.Item - свойство ,чтобы сделать его потокобезопасным?
Это сообщение отредактировал(а) Stas123 - 4.8.2011, 15:44 |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
для написания Synchronized используйте паттерн Декоратор (ака Wrapper) - то есть берете и наследуете свой класс от того, от чего наследуется List<T>, внутри него объявляете private List<T> с которым и взаимодействуете через реализуемые методы, внутри которых делаете lock-и какие надо (не везде нужен например lock - гдето можно обойтись ReadWriteLock-ом и т.д.)
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| HalkaR |
|
|||
![]() Пуфыстый назгул ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2132 Регистрация: 8.12.2002 Где: В Москве Репутация: 14 Всего: 42 |
По идее начиная с .Net 3.0 есть стандартная коллекция SynchronizedCollection. Она реализует IList<T>. Но перечисление этой коллекции все равно не thread safe. Уж не знаю почему они так сделали. К счатью эта коллекция выставляет наружу SyncRoot так что можно сделать безопасное перечисление.
Для примера можно посмотреть здесь - http://www.koders.com/csharp/fidEC9729DF37...172CED0918.aspx Добавлено через 2 минуты и 42 секунды Кстати jonie прав - если сделаете на ReaderWriterLockSlim - будет эффективнее, а переделка не сложная. |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
а как ты себе это представляешь должно быть сделано? -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| HalkaR |
|
|||
![]() Пуфыстый назгул ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2132 Регистрация: 8.12.2002 Где: В Москве Репутация: 14 Всего: 42 |
||||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
ну так это очень очень непросто. Копировать как ? Глубокое копирование? А если не поддерживается IClonable? И т.д. В общем я думаю понятно почему в стандартной версии это не потокобезопасно. -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |