私はこれを理解することができません.私は自分の問題を盲目的に見つめていると思います.
Msql サーバー 2012 で次のシナリオがあります。
10 スレッド (C# + NHibernate) では、次のようにします。
- トランザクションの開始 (ReadCommitted)
- Select count(*) from MyTable1 where ... (インデックスを持たない列で比較するため、おそらく完全なテーブル スキャンが発生します)
- MyTable1 に挿入...
- MyTable2 に挿入...
- a、b、c を 100 回繰り返します。
- トランザクションをコミットする
使用されるデータはスレッドごとに固有であるため、あるスレッドが別のスレッドと同じ挿入を作成することはできません。
これにより、デッドロックが発生します。
ReadUncommittedトランザクションを使用すると、読み取り/書き込みロックがまったくないため、問題なく動作します。
しかし、これがどのようにデッドロックを引き起こす可能性があるかについて頭を悩ませているようには見えず、これがデッドロックの教科書的な例であると確信しています。
これがどのようにデッドロックを引き起こす可能性があるかを誰かが明確にすることはできますか?