1. ホーム
  2. multithreading

[解決済み] デッドロックとは何ですか?

2022-03-02 21:23:25

質問

マルチスレッドアプリケーションを記述する際に、最もよく経験する問題の1つがデッドロックです。

コミュニティへの質問です。

  1. デッドロックとは何ですか?

  2. どのように検出するのですか?

  3. 対処していますか?

  4. そして最後に、どのようにして発生を防いでいるのか。

どのように解決するのか?

A ロック は、複数のプロセスが同時に同じリソースにアクセスしようとしたときに発生します。

あるプロセスは負けてしまい、他のプロセスが終了するのを待たなければなりません。

A デッドロック は、待機中のプロセスが、最初のプロセスが終了する前に必要とする別のリソースをまだ保持している場合に発生します。

では、例を挙げます。

リソースAとリソースBは、プロセスXとプロセスYで使用されている

  • XがAの使用を開始する。
  • XとYはBを使い始めようとする
  • Yが「勝ち」、先にBを手に入れる
  • 今、YはAを使う必要がある
  • AはXによってロックされ、Yを待っています。

デッドロックを回避するには、このようにプロセスがクロスオーバーするのを避けるのが一番です。何かをロックする必要性をできる限り減らすことです。

データベースでは、1つのトランザクションで異なるテーブルに多くの変更を加えることを避け、トリガーを避け、できるだけ楽観的/ダーティ/ノロック読みに切り替えてください。