Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
26.06.2009, 06:49
|
|||
---|---|---|---|
|
|||
web-сервис и race-conditions |
|||
#18+
Всем привет! В локальной сети запущен сервис, что предоставляет методы для работы с данными клиента, хранимыми в виде файлов на жёстком диске. Одновременные попытки нескольких операторов через web-сервис изменить файловую информацию о клиенте (переместить файлы, изменить название, удалить, перезаписать) чреваты рассинхронизацией каталога. Я бы хотел повесить lock на выполнение операций, связанных с файловыми данными каждого конкретного клиента. Что вы думаете примерно о такой архитектуре решения: WebMethodA (clientId, ... ) { lock (LockManager.Current.GetCriticalSection(clientId)) { // выполняю операцию "A" над данными clientId } } WebMethodB (clientId, ...) { lock (LockManager.Current.GetCriticalSection(clientId)) { // выполняю операцию "B" над данными clientId } } ----------------- class LockManager { static LockManager Current { get; private set; } static LockManager() { Current = new LockManager(); } object GetCrititcalSection (clientId) { lock (this) { if (!_cs.Contains(clientId)) _cs.Add(clientId, new object()); return _cs[clientId] } } Dictionary<id, object> _cs = new ... ; } Заранее спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=33&mobile=1&tid=1548518]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
74ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
26ms |
get tp. blocked users: |
2ms |
others: | 352ms |
total: | 501ms |
0 / 0 |