Je soupçonne qu'il s'agit d'un cas marginal qui ne vaut pas la peine d'être rendu plus efficace. Notez que vous deviez obtenir 3 sessions en essayant de saisir la même ligne - un événement rare. Et vous avez fait un ROLLBACK -- également rare. Ainsi, l'impasse qui s'est produite est exagérée, mais ne vaut pas la peine d'être réparée. Pour cette raison, il faut être prêt à gérer les blocages partout.
Pour votre information, s'il s'agissait de 3 nœuds d'un cluster Galera, il y aurait des erreurs sur COMMIT
que le code aurait à gérer. Je soupçonne qu'il y a encore plus de combinaisons de choses étranges si vous appliquez cette transaction (avec rollback ou commit) plusieurs fois à plusieurs nœuds.
Passons maintenant à votre question... Vraisemblablement, le blocage ne s'est pas produit parce que l'un des threads a obtenu le verrou exclusif et l'autre a été frappé par un "attente" au lieu d'un "blocage".