食事の哲学者の問題を innodb に適用し、select for update を使用します。
1) 単一の主キー (フォーク) を持つ innodb テーブルによって表される、100,000 のフォークを持つテーブル
2) フォークのグラブは、このテーブルの 2 から 20 個のプライマリ キーのランダム リストを指定する更新用の選択であり、「グラブ」は、100,000 の異なるプライマリ キーに対するこのランダム フォーク リストの更新用の 1 つの選択です。 . ところで、select 文のキーのリストの順序はランダムです。
3) 5 つ以上の思想家が存在し、交差するフォークをつかむ最大 50 の「同時」トランザクションなどがあります。
4) 思考時間は、手順 2 で主キーの行の他の列を更新しています。思考時間は決して長くはありません。
質問: innodb を使用すると、上記のシナリオで不公平によるデッドロックや飢餓が発生する可能性はありますか? 注意することはありますか?(分離レベルの読み取りがコミットされました。)
目的: このテーブルとロック行の主キーを使用して、複雑な更新シナリオの依存関係を表します。これにより、さまざまな関連テーブル (一貫した順序のテーブル) とその中の行に対して一連の更新を行う前に、依存関係のセットを決定します。ステップ 1 の主キーのセットと同等であり、トランザクションの開始時に select for update を使用してこれらの依存関係をロックします。(もちろん、更新を選択した後、依存関係を再クエリして、変更されていないことを確認します。)