[解決済み] デッドロックとは何ですか?
2022-04-30 15:41:11
質問
マルチスレッドアプリケーションを記述する際に、最もよく経験する問題の1つがデッドロックです。
コミュニティへの質問です。
-
デッドロックとは何ですか?
-
どのように検出するのですか?
-
対処していますか?
-
そして最後に、どのようにして発生を防いでいるのか。
どのように解決するのか?
A ロック は、複数のプロセスが同時に同じリソースにアクセスしようとしたときに発生します。
あるプロセスは負けてしまい、他のプロセスが終了するのを待たなければなりません。
A デッドロック は、待機中のプロセスが、最初のプロセスが終了する前に必要とする別のリソースをまだ保持している場合に発生します。
では、例を挙げます。
リソースAとリソースBは、プロセスXとプロセスYで使用されている
- XがAの使用を開始する。
- XとYはBを使い始めようとする
- Yが「勝ち」、先にBを手に入れる
- 今、YはAを使う必要がある
- AはXによってロックされ、Yを待っています。
デッドロックを回避するには、このようにプロセスがクロスオーバーするのを避けるのが一番です。何かをロックする必要性をできる限り減らすことです。
データベースでは、1つのトランザクションで異なるテーブルに多くの変更を加えることを避け、トリガーを避け、できるだけ楽観的/ダーティ/ノロック読みに切り替えてください。
関連
-
コレクションが変更されたため、列挙操作が実行できない場合がある Error
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] プロセスとスレッドの違いは何ですか?
-
[解決済み] 並行処理と並列処理の違いは何ですか?
-
[解決済み] レースコンディションとは何ですか?
-
[解決済み] シンクロナイズド」とはどういう意味ですか?
-
[解決済み] ロック、ミューテックス、セマフォの違いは何ですか?
-
[解決済み] 非同期とマルチスレッド - 違いはあるのか?
-
[解決済み] ノンブロッキングI/Oは、マルチスレッドのブロッキングI/Oより本当に速いのか?どのように?
-
[解決済み] 条件付き変数とセマフォの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
コレクションが変更されたため、列挙操作が実行できない場合がある Error
-
[解決済み] Nodejsのシングルスレッドの意味するところ
-
[解決済み] スレッドは何本までならOK?
-
[解決済み] デッドロックとライブロックの違いは何ですか?
-
[解決済み] 技術的に、なぜErlangのプロセスはOSのスレッドよりも効率的なのですか?
-
[解決済み] ロックされていないミューテックスをロックすることは、どの程度効率的ですか?ミューテックスのコストは?
-
[解決済み] デッドロックとは何ですか?
-
[解決済み] マルチスレッドに代わるNode JSを把握する
-
[解決済み] スレッドセーフとは何ですか?
-
[解決済み] Powershellでコマンドを並列に実行することはできますか?