家には居住者がいて、どの家にも 2 人の居住者が同じ高さを持つことはできないと仮定します。
- ランダムな家を選ぶ
- 家の現在の居住者のリストを取得する
- リストを調べて、どれを保持、置換、削除、または追加するかを決定します
- 新しいリストに同じ身長の居住者が含まれていないことを確認してください。
- 既存のリストを新しいリストに置き換えます。必要に応じて削除、挿入、または更新します。
簡単に思えますが、50 個のスレッドがすべて同時にこれを実行しようとすると、複雑になります。私はUPDLOCK、ROWLOCKを選択(ステップ2)で使用して、更新する可能性のある占有者への更新をブロックしました。ただし、現在の居住者がなく、新しい居住者が追加されると、時々失敗します。失敗は常に一意の制約違反です。これは決して起こらないはずですが (手順 4 を参照)、実際に発生します。
手順 2 ~ 5 は、ReadCommitted 分離レベルを使用して TransactionScope 内で実行されています。
このようなシナリオの処理方法を定義するベスト プラクティス モデルはどこかにありますか?