|
|
|
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: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
33ms |
get tp. blocked users: |
2ms |
| others: | 13ms |
| total: | 151ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...