Как синхронизироваться в ASP.NET
запихни в shared memory
shared memoryА что это? Если это процесс для хранения данных (локов то кто будет снимать локи, когда процесс ASP.NET насильно убьют?
Пефоманс там не критичен, можно даже базу использовать.
ну вроде в базе несложно сделать лок? select for update типа
на какие данные писать select for update?
создай таблицу, твой аргумент сделай ключом, тот же select проверит существование ключа, если его нет, то можно сделать хотя бы на период работы транзакции
NoSQL-решение: файловая система, можно в памяти
А что это? Если это процесс для хранения данных (локов то кто будет снимать локи, когда процесс ASP.NET насильно убьют?Можно попробовать использовать named mutex. В имя нужно включить аргумент. Аккуратно обработать AbandonedException.
файловая система, можно в памятиКак ставить лок? Кто будет чистить локи?
Идея с select for update мне подходит.
куча способов, можно выбрать в зависимости от специфики задачи
например?
используешь любую из системных функций для взятия блокировки (я не знаю, как они называются в этой вашей венде)
в зависимости от специфики задачи можно не удалять (если не слишком много этих файлов выходит)
в памяти как?
Если это процесс для хранения данных (локов то кто будет снимать локи, когда процесс ASP.NET насильно убьют?В shared memory - данные. Защищаешь mutex-ом(или аналогом). ОС освобождает mutex при любом завершении процесса.
ну я делал tmpfs на линуксе
http://msdn.microsoft.com/en-us/library/system.threading.mu...
Дополнение к посту майка. Мьютекс нужен как раз для описанного сценария.
Дополнение к посту майка. Мьютекс нужен как раз для описанного сценария.
Оставить комментарий
6yrop
Есть некоторая процедура с целочисленным аргументом. Нельзя, чтобы одновременно несколько потоков выполняли процедуру с одним и тем же аргументом. ASP.NET может пересоздать app pool, а старый pool может продолжать работать. Поэтому использовать Monitor не получится. Что делать? Выносить процедуру в другой процесс за рамки ASP.NET очень не хочется.