Bloqueio em duas fases
Algoritmo clássico de controle de concorrência: a transação bloqueia os objetos que toca e só libera todos os bloqueios no commit. "Duas fases" = fase de crescimento (adquirir bloqueios) + fase de encolhimento (liberar). Garante serializabilidade, mas corre risco de deadlock.
2PL estrito (S2PL): mantém os bloqueios exclusivos até o fim, o que garante recuperabilidade. 2PL rigoroso: mantém todos os bloqueios até o fim. O InnoDB do MySQL usa S2PL no isolamento Serializable. Concorrente: MVCC com snapshot isolation (padrão do Postgres) — bloqueia só as escritas, e as leituras enxergam um snapshot consistente sem esperar. O 2PL gera mais contenção de bloqueios, mas é mais simples de raciocinar. Bancos distribuídos modernos usam controle de concorrência otimista (Cockroach) ou MVCC (Postgres, Spanner). Ensinado em todo curso de bancos de dados.