|
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 ... ; } Заранее спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2009, 06:49 |
|
|
start [/forum/topic.php?fid=33&fpage=38&tid=1548518]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
28ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 114ms |
0 / 0 |