Как синхронизироваться в ASP.NET

6yrop

Есть некоторая процедура с целочисленным аргументом. Нельзя, чтобы одновременно несколько потоков выполняли процедуру с одним и тем же аргументом. ASP.NET может пересоздать app pool, а старый pool может продолжать работать. Поэтому использовать Monitor не получится. Что делать? Выносить процедуру в другой процесс за рамки ASP.NET очень не хочется.

Dasar

запихни в shared memory

6yrop

shared memory
А что это? Если это процесс для хранения данных (локов то кто будет снимать локи, когда процесс ASP.NET насильно убьют?
Пефоманс там не критичен, можно даже базу использовать.

Marinavo_0507

ну вроде в базе несложно сделать лок? select for update типа

6yrop

на какие данные писать select for update?

Marinavo_0507

создай таблицу, твой аргумент сделай ключом, тот же select проверит существование ключа, если его нет, то можно сделать хотя бы на период работы транзакции

Marinavo_0507

NoSQL-решение: файловая система, можно в памяти

kokoc88

А что это? Если это процесс для хранения данных (локов то кто будет снимать локи, когда процесс ASP.NET насильно убьют?
Можно попробовать использовать named mutex. В имя нужно включить аргумент. Аккуратно обработать AbandonedException.

6yrop

файловая система, можно в памяти
Как ставить лок? Кто будет чистить локи?
Идея с select for update мне подходит.

Marinavo_0507

> Как ставить лок? Кто будет чистить локи?
куча способов, можно выбрать в зависимости от специфики задачи

6yrop

например?

Marinavo_0507

создаёшь файл, в имени кодируешь свою переменную
используешь любую из системных функций для взятия блокировки (я не знаю, как они называются в этой вашей венде)
в зависимости от специфики задачи можно не удалять (если не слишком много этих файлов выходит)

6yrop

в памяти как?

Dasar

Если это процесс для хранения данных (локов то кто будет снимать локи, когда процесс ASP.NET насильно убьют?
В shared memory - данные. Защищаешь mutex-ом(или аналогом). ОС освобождает mutex при любом завершении процесса.

Marinavo_0507

ну я делал tmpfs на линуксе

agaaaa

http://msdn.microsoft.com/en-us/library/system.threading.mu...
Дополнение к посту майка. Мьютекс нужен как раз для описанного сценария.
Оставить комментарий
Имя или ник:
Комментарий: