LINUX.ORG.RU

История изменений

Исправление 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 строки меняя имя группы, завершаем транзакцию и выходим (не работаем чтобы не блокировать коллег по своей группе)