問題タブ [deadlock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
13 に答える
6578 参照

visual-studio-2008 - VisualStudio2008の右クリックデッドロックを停止する方法

Visual Studio 2008で非常に深刻な問題が発生します。デバッグ中に右クリック(定義に移動、次のステートメントの設定など)すると、Visual Studioがデッドロックし、応答しないモードになることがあります。

誰かが同じ問題を抱えていましたか?誰かがそれを解決する方法を知っていますか?

編集:私はいくつかのホットフィックスでSP1を使用しています。

0 投票する
6 に答える
1944 参照

sql-server-2000 - Nunit でデータベース デッドロック テストを作成できますか?

このasp.netでは、デッドロックが発生する可能性があります。コードがそれらを適切に処理することを確認したいので、デッドロックをトリガーする NUnit テストを作成しようとしています.....

DAO はエンティティごとに分割されます。各エンティティには一連のテストがあり、これらは Startup() および Teardown() メソッドで囲まれています。これらのメソッドは、トランザクション スコープを作成し、テストが完了した後にロールバックします。これは他のすべての場合にうまく機能しますが、デッドロックにはまったく役に立ちません。

TransactionScope と SQL2000 (つまり、MSDTC が関係している) を使用して、確実に再現できる "デッドロック" テストをセットアップして実行するにはどうすればよいですか? 詳細: 2 人のユーザーが異なる特定のデータ値を使用して 2 つの関数を呼び出すと、デッドロック発生する状況があることはわかっています。NUNIT内でこれをシミュレートするにはどうすればよいですか?そしてデッドロックを常に発生させますか?

はい、私は「そもそもデッドロックが発生するのを止めてみませんか」という行動計画から始めましたが、デッドロックが発生する可能性のあるコードを制御することはできません。関数を呼び出すだけで、デッドロックが発生する可能性があります。 .

0 投票する
8 に答える
124591 参照

multithreading - 再帰ロック (Mutex) と非再帰ロック (Mutex) の比較

POSIX では、mutex を再帰的にすることができます。これは、同じスレッドが同じミューテックスを 2 回ロックでき、デッドロックしないことを意味します。もちろん、ロックを 2 回解除する必要もあります。そうしないと、他のスレッドがミューテックスを取得できません。pthread をサポートするすべてのシステムが再帰的ミューテックスもサポートしているわけではありませんが、POSIX に準拠したい場合は、 .

他の API (より高レベルの API) も通常、ロックと呼ばれることが多いミューテックスを提供します。一部のシステム/言語 (Cocoa Objective-C など) は、再帰的ミューテックスと非再帰的ミューテックスの両方を提供します。一部の言語では、どちらか一方しか提供されません。たとえば、Java のミューテックスは常に再帰的です (同じスレッドが同じオブジェクトに対して 2 回「同期」する場合があります)。それらが提供する他のスレッド機能によっては、再帰的ミューテックスがなくても問題ないかもしれません。なぜなら、再帰的ミューテックスは自分で簡単に作成できるからです (より単純なミューテックス/条件操作に基づいて、再帰的ミューテックスを自分で実装しました)。

私がよく理解していないこと: 非再帰的ミューテックスは何に適していますか? 同じミューテックスを 2 回ロックすると、スレッドのデッドロックが必要になるのはなぜですか? それを回避できる高水準言語でさえ (たとえば、これがデッドロックするかどうかをテストし、デッドロックする場合は例外をスローする)、通常はそれを行いません。代わりに、スレッドをデッドロックさせます。

これは、誤って 2 回ロックして 1 回だけロックを解除した場合のみであり、再帰的ミューテックスの場合、問題を見つけるのが難しいため、代わりにすぐにデッドロックして、間違ったロックが表示される場所を確認しますか? しかし、ロックを解除するときにロック カウンターを返すことで同じことを行うことはできませんでした。最後のロックを解放し、カウンターがゼロではないことが確実な状況では、例外をスローしたり、問題をログに記録したりできませんか? または、私が見落としている非再帰的ミューテックスの他のより便利なユースケースはありますか? それとも、非再帰的ミューテックスは再帰的ミューテックスよりもわずかに高速になる可能性があるため、単なるパフォーマンスでしょうか? ただし、これをテストしたところ、違いはそれほど大きくありません。

0 投票する
16 に答える
43965 参照

java - Javaでのデッドロック検出

ずっと前に、私はJavaリファレンスブックから「Javaにはデッドロックを処理するメカニズムがありません。デッドロックが発生したことすら知りません」という文を保存しました。(Head First Java 2nd Edition、p.516)

それで、それはどうですか?Javaでデッドロックケースをキャッチする方法はありますか?つまり、デッドロックケースが発生したことをコードが理解する方法はありますか?

0 投票する
5 に答える
6923 参照

python - テスト目的でMySQLでデッドロックを引き起こすにはどうすればよいですか?

PythonライブラリをMySQLdbで動作させて、デッドロックを検出して再試行できるようにしたいと思います。良いソリューションをコーディングしたと思います。今度はそれをテストしたいと思います。

MySQLdbを使用してデッドロック状態を作成するために実行できる最も単純なクエリのアイデアはありますか?

システム情報:

  • MySQL 5.0.19
  • クライアント5.1.11
  • Windows XP
  • Python 2.4 / MySQLdb 1.2.1 p2
0 投票する
4 に答える
2806 参照

asp-classic - クラシック ASP:「アプリケーション」グローバル オブジェクトがデッド ロックを引き起こす可能性はありますか?

従来のASPには、すべてのセッションから同時にアクセスされる「アプリケーション」と呼ばれるグローバル オブジェクトがあります。

「アプリケーション」オブジェクトは共有リソースであるため、デッドロックを引き起こす可能性はありますか?

編集:そうでない場合、なぜロックロック解除の方法があるのですか? 参照

0 投票する
5 に答える
2401 参照

.net - Windbg で ReaderWriterLock のロックホルダー (リーダー) を見つける方法

デッドロックが原因でハングした .Net プロセスのダンプを取得しました (GUI スレッドが応答しなくなり、ログにはいくつかのスレッドが応答を停止したことが示されています)。私はスナップショットを撮り、現在windbgでそれを調べています.1つを除くすべてのスレッドが最後のものを待っています. その 1 つのスレッドのスタック トレースを !clrstack -p で見ると、ReaderWriterLock への書き込みを取得しようとしていることがわかります。

デッドロックがどのように発生したかを理解できるように、他のどのスレッドがそのロックを保持しているかを知るにはどうすればよいですか?

ありがとう

[編集] .Net1.1 の sos.dll にはこれを支援するコマンド !rwlocks があったようですが、.Net2.0 バージョンにはありません。狩りは続く

0 投票する
4 に答える
35330 参照

c# - ADOを使用してC#で効率的なSql Serverデッドロック処理を取得するには?

ADO.net のラッパーとして機能する「データベース」クラスがあります。たとえば、プロシージャを実行する必要がある場合は、Database.ExecuteProcedure(procedureName, parametersAndItsValues) を呼び出します。

SQL Server 2000 のデッドロック状況で深刻な問題が発生しています。私たちのチームの一部は、これらのイベントを最小限に抑えるために SQL コードとトランザクションに取り組んでいますが、このデータベース クラスをデッドロック状況に対して堅牢にすることを考えています。

デッドロックの被害者に、おそらく少し遅れてから再試行してもらいたいのですが、それが可能かどうかはわかりません。使用するメソッドのコードは次のとおりです。

この処理を catch ブロック内で行うことはできますか?

0 投票する
6 に答える
25816 参照

sql-server - MSSQLの更新クエリでのページレベルでのデッドロックを減らす

デフォルトの「READCOMMITED」トランザクションの下で、フラットなプレーンテーブルでの愚かな単純なSQLUPDATEクエリによって引き起こされるいくつかの面白いデッドロックがあります。

PKvarchar(11)、クラスター化インデックスがあります。テーブルにトリガーやテーブルの関係などはありません。

いくつかのチェックを行ったところ、デッドロックはROW /レコードレベルではなく、「PAGE」レベルで発生していることがわかりました。次に、更新クエリごとに、100(およびそれ以上)のPAGEロックが必要であることがわかりました。(一度に1つの行を更新しているので、意味がありません)

デッドロックの発生を防ぐ方法はありますか?または、カーソルを使用せずに1行の更新に必要なロックの数をどのように減らすことができますか?

-

あなたの提案をありがとう。

フィルファクターを高くしたり低くしたりして、インデックスを数回再構築しようとしました。プロセスに異なる位置/スライスを更新させようとしました。しかし、何も改善も最悪もありませんでした。

-

SQLServerプロファイラーを試しました。「Lock:DeadlockChain」と「Lock:Deadlock」をキャプチャしましたが、「DeadlockGraph」はキャプチャされませんでした。どちらの側も、読み取りコミット、自動コミットモードで単純な更新クエリを実行しています。

0 投票する
2 に答える
1108 参照

c++ - DirectShow の eof 検出

DirectShow フィルターグラフがファイルの終わりに達したことを検出する方法はありますか? そのファイルの終わりまでに、SampleGrabber フィルターを使用するフィルターグラフは別の SampleCB 呼び出しを受信しないことを意味します。

機能しないものを次に示します。

  • 信頼IMediaDet::get_StreamLength(ビデオには実際よりも多くのフレームがあるとよく言われます)
  • Trust IMediaSeeking::GetDuration(IMediaDet と一致、+/- 1 フレーム)
  • 使用IMediaControl::GetState(すべてのフレームがファイルから既に処理されている場合でも、フィルターグラフは実行されたままになります)

バックグラウンド:

私はビデオ処理を行っており、SampleGrabber でフィルターグラフを作成するクラスを持っています。が呼び出されるたびSampleGrabber::SampleCBに、mutex でブロックして、filtergraph をプル モードで実行できるようにします。別のフレームの準備ができたら、メイン スレッドでミューテックスのブロックを解除し、完了しSampleGrabber::SampleCBたというシグナルが送信されるのを待ちます。一部のビデオでIMediaDet::get_StreamLengthは、ビデオに実際に存在するよりも多くのフレームがあることがわかります。最終フレームを抽出し、実際に存在するフレームよりも 1 つ多く要求すると、メイン スレッドSampleGrabber::SampleCBは二度と呼び出されないため、永久にブロックされます。いつ検出できるようにしたいのですか?SampleGrabber::SampleCBファイルソースに対して呼び出されることはありません。Windows Media Player などのアプリケーションは、ビデオが最後の実際のフレームの後に終了したことを GUI が報告するため、何らかの方法でこれを行うことができます。これを行う方法があるようです。

編集:

WaitForSingleObjectメインスレッドのブロックを実装するために使用しています。私がこれまでに使用してきた回避策は、Greg が提案したことを実行することです: 有限のタイムアウトを設定します。残念ながら、これは少しトリッキーになります。待機は、真の eof、低速のネットワーク ファイルシステム、ネットワーク接続の切断、低速のデコーダなど、さまざまな理由で失敗する可能性があります。