Você não precisa de nenhum
LOCK
explícito entrar em um impasse. Aqui está uma demonstração muito simples do zero com apenas INSERTs:create table a(i int primary key);
create table b(i int primary key);
A sessão nº 1 faz:
begin;
insert into a values(1);
Então a sessão #2 faz:
begin;
insert into b values(1);
insert into a values(1);
-- here it goes into waiting for session #1 to finish its transaction
Então a sessão #1 faz:
insert into b values(1);
E então ocorre o impasse:
O mesmo pode acontecer com UPDATEs simples ou uma combinação de UPDATEs e INSERTs. Essas operações recebem bloqueios implícitos e, se ocorrerem em sessões diferentes em ordens diferentes, podem ocorrer deadlock.