Você está usando
LOCK IN SHARE MODE
que bloqueia a linha de UPDATE
ou DELETE
operações, mas permite que a linha seja lida. Consulte esta documentação
para mais informações. Um resumo da documentação está abaixo. Sua consulta retorna a mesma linha para todos os processos/trabalhadores e eles simplesmente esperam a liberação do bloqueio anterior antes de colocar seu próprio bloqueio na linha. Para realizar o tipo de bloqueio que você precisa, substitua seu
SELECT ... LOCK IN SHARE MODE
com SELECT ... FOR UPDATE
.