Мисля, че очакваното поведение е малко по-неправилно. Преди db_slow да извърши ангажименти, всички редове в таблицата са заключени. След като се ангажира, има два реда. db_fast се деблокира, когато db_slow извърши ангажимент. Следователно поведението е:
- db_slow:изберете ред 1 и го заключете
- db_slow:вижте, че е само 1 ред и изчакайте
- db_fast:опитайте да изберете ред 1, вижте дали е заключен, изчакайте
- db_slow:вмъкване на ред с '2'
- db_slow:ангажиране
- db_fast:деблокиран и чете 2 реда
- db_fast:не прави нищо
- Завършва с foo:1, 2