期待される動作は少しずれていると思います。 db_slowがコミットする前に、テーブル内のすべての行がロックされます。コミットした後、2つの行があります。 db_slowがコミットすると、db_fastのブロックが解除されます。したがって、動作は次のとおりです。
- db_slow:行1を選択してロックします
- db_slow:1行しかないことを確認して待機します
- db_fast:行1を選択して、ロックされていることを確認してください。
- db_slow:「2」で行を挿入
- db_slow:コミット
- db_fast:ブロックを解除して2行を読み取ります
- db_fast:何もしません
- 最終的にfoo:1、2