ыыы
Дата: 22.08.2006 20:34:55
На сервере есть 2 Perl-скрипта, работающие с БД.
Первый скрипт вызывается пользователями и читает/заносит данные в БД. Запускается он ОЧЕНЬ часто.
Второй запускается автоматически (CRON) каждые 15 минут.
Теперь вопрос: может ли быть такая ситуация, что первый скрипт будет находиться в процессе работы (допустим, выполнит 5 SQL-команд, а 10 команд -ещё нет), а в это время запустится второй скрипт (CRON).
Если да - то как это предотвратить? Потому, что если первый скрипт работу до конца не закончит, данные в БД будут неправильными, и второй скрипт будет работать с ошибками.
Короче, что делать?
Anjey aka PM
Дата: 22.08.2006 22:52:50
Думаю вам подойдет использование файл-локов.
Процессы которые обслуживают клиентов (читают/пишут и запускаются часто) получают шаред-лок на файл.
Процесс который работает по крону получает эксклюзивный лок на файл.
При попытке получить эксклюзивный файл-лок все попытки получить шаред-лок блокируются до момента пока эксклюзивный лок не будет получен а затем освобожден. Эксклюзивный лок предоставляется только когда все шаред-локи на файл освобождены.
Смотреть
тут