История изменений
Исправление quester, (текущая версия) :
я придумал другой вариант:
заводим вспомогательную строку как в «mutex» (положим строка в таблице одна для простоты). в строке имя группы, например A или B.
любой процесс:
1) начинаем транзакцию
2) делаем select group_name from semaphore for share;
3) если группа наша - работаем, завершаем транзакцию и выходим
4) если группа не наша - делаем select group_name from semaphore for update skip locked;
5) если ничего не вернулось значит чужие воркеры есть - завершаем транзакцию и выходим
6) если вернулось значение значит чужих воркеров нет - значит мы получили лок.
7) делаем update строки меняя имя группы, завершаем транзакцию и выходим (не работаем чтобы не блокировать коллег по своей группе)
Исходная версия quester, :
я придумал другой вариант:
заводим вспомогательную строку как в «mutex» (положим строка в таблице одна для простоты). в строке имя группы, например A или B.
любой процесс:
1) начинаем транзакцию 2) делаем select group_name from semaphore for share; 3) если группа наша - работаем, завершаем транзакцию и выходим 4) если группа не наша - делаем select group_name from semaphore for update skip locked; 5) если ничего не вернулось значит чужие воркеры есть - завершаем транзакцию и выходим 6) если вернулось значение значит чужих воркеров нет - значит мы получили лок. 7) делаем update строки меняя имя группы, завершаем транзакцию и выходим (не работаем чтобы не блокировать коллег по своей группе)