Семафор для работы с БД
От: lord0n Россия  
Дата: 02.04.08 08:01
Оценка:
Господа, доброго времени суток.
Есть некий ком-объект, написанный на VB.NET, с которым работает некоторое приложение (это приложение с другими объектами не работает, так что только ком )
И есть некий сервер который добавляет в базу задание на обработку этим комом
Каждый экземпляр кома запускается отдельно с каждым приложением (заранее узнать сколько объектов будет запущено не возможно).
Все объекты работают независимо и о существовании друг от друга ничего не знают.
В каждом коме включен таймер, который мониторит БД с целью получения нового задания на работу. Как только задание получено, выставляется флаг "в работе".
Вопрос в том как сделать семафор чтобы комы не ломились в БД и не получали задания одновременно.

Сначало была идея сделать семафорный файл, но решили отказаться — не очень стабильно работает
Сейчас это реализованное таким образом:
В базе есть таблица с одним полем — IsBusy. Ком обращается к БД, смотрит это поле и если оно равно 0, то выставляет его в 1, получает задание, выставляет флаг "в работе" и возвращает поле IsBusy в 0.
Если IsBusy равно 1, то объект засыпает на пол минуты и снова запрашивает БД — это сделано в цикле.

Существуют ли ещё алгоритмы как это реализовать?
Флаг в БД тоже не очень нравится, т.к. может возникнуть ситуация когда 2 (или более) объекта обратятся к БД и получат одно и тоже задание.


02.04.08 14:21: Перенесено модератором из 'Алгоритмы' — надеюсь, это более подходящее место — Кодт
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.