Механизм блокировки между процессом на нескольких машинах

У меня есть приложение C# с NHibernate, который должен сделать некоторые операции по SQL Server DB.

Наша цель состоит в том, чтобы запустить это приложение многократно в той же машине и также в других машинах.

На самом деле приложение вставляет строку в Таблицу SQL и проверку, если первая строка с минимальной датой является строкой с корректным PID и названием машины, таким образом, приложение установило блокировку и делает работу.

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

Какая-либо подсказка об изменении архитектуры блокировки?

Проблема состоит в том, что приложение может работать на основе нескольких машин.

6
задан Mauro Destro 4 February 2010 в 10:35
поделиться

2 ответа

Как насчет управления замком в БД? Вы можете иметь таблицу/процедуру хранения, в которой каждый запущенный экземпляр регистрируется, получает уникальный идентификатор, и использует хранимую процедуру для выполнения lock&free. (Тот же метод, что и для предотвращения многократного входа одного пользователя с нескольких машин).

3
ответ дан 17 December 2019 в 04:46
поделиться

Либо

Я реализовал оба способа.

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

2
ответ дан 17 December 2019 в 04:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: