私はデッドロックが過去の熱心な研究課題であることを知っています。しかし、私は多くの最新のオペレーティングシステムを研究しましたが、今はデッドロックに関する大きな問題はありません。私はデッドロックがオペレーティングシステム自体によって厳密に管理されるいくつかのリソースを知っており、デッドロックをどこかで防ぐことができると思われます。私は、さまざまな設計原則を持つ一般的なシステムでは、他とは異なる扱いのリソースに関する多くの機能を知っていますが、それらはすべてデッドロックフリーです。最新のオペレーティングシステムでデッドロックが発生した場合は、
答えて
2つのミューテックスをプログラム内で使用し、最初のスレッドでは、mutex1、sleep(500ms)、mutex2、2番目のスレッド:mutex2、sleep(1000ms)、mutex1。
システム内。アプリケーションがSendMessage
を使用し、ブロードキャストHWND_BROADCAST
を使用しているWindows(8.1を含む)では、1つのアプリケーションがハングアップすると、アプリケーションもハング状態になります。また、DDE通信の一部の場合(一部のプログラムではShellExecute
を含む)、1つのアプリケーションが応答しない場合、アプリケーションはハング状態になる可能性があります。プロセスまたはスレッドが同期される場合、デッドロックが常に可能となります
しかし、あなたはSendMessageTimeoutを使用することができます...。プロセスとスレッドの同期は、アプリケーションの必須要素です。
AND ... SYSTEM-WIDEデッドロック(Windows): この操作を行う前に、すべての文書を保存してください。
Create HWND h1 with parent=0 or parent=GetDesktopWindow and styles 0x96cf0000
Create HWND h2 with parent=h1 and styles 0x96cf0000
Create HWND h3 with parent=h2 and styles 0x56cf0000 (here must be a child window).
Use ::SetParent(h1, h3);
これらのウィンドウのいずれかをクリックします。
システムは、周期的(三角形)の順序でウィンドウの順序を変更しようとします。アプリケーションが停止していますが、他のアプリケーションがSetWindowPosを使用しようとすると、アプリケーションはこの関数からより新しい戻り値を返します。タスクマネージャーは役立たず、Alt + Ctrl + Delも機能しなくなります。 CPU使用率100%...ハードリセットのみが役立ちます。
これを防ぐ可能性がありますが、この状況はできるだけ早く検出する必要があります。
オペレーティングシステムのデッドロックがまだ発生します。システムが競合リソースを制限している場合、デッドロックを再利用できない場合でも、それは可能です。
Linuxでは、I/Oが適時にリリースされないときに起こるカーネルストールを見てください。カーネルストールは、特に、VMwareとゲストオペレーティングシステムの間で興味深いものです。
外部の起動プログラムの場合、サンのシステムとネットワークに問題があるとデッドロックが発生します。
新しいリリースのデッドロックは、カーネルが成熟している間に、ユーザごとではなく、コミュニティ全体からかなり頻繁に発生します。
これまでにブルースクリーンが表示されたり、すぐに再起動されましたか?そのうちのいくつかはリソースの喪失が原因です。
カーネルはかなり成熟しており、リソースを再生するのにうまく行っていますが、完璧ではありません。
現代のリソースハンドラのほとんどは、ロック可能なオブジェクトではなくサービスとして提供される傾向があります。オペレーティングシステム内のほとんどのリソース共有は、別々のチャネルに依存し、重複の大部分を緩和します。共有バッファの競合を直接ロックするのではなく、キューとトグルの信頼性が高まります。これは、デッドロックの機会が少なくなるOSの部品や部品のトレンドの一般的なものですが、デッドロックの少ないシステムを保証する方法はありません。
- 1. オペレーティングシステムでデッドロックが発生する頻度(発生する頻度)
- 2. テーブルが空の場合、LockForUpdateによりデッドロックが発生する
- 3. エラーが発生した場合は
- 4. ActiveRecord CollectionまたはArrayでActiveRecord :: RecordInvalidエラーが発生した場合の更新
- 5. 私のオペレーティングシステムでmykernel.isoの実行エラーが発生しました
- 6. 最新のオペレーティングシステムでのメモリセグメンテーション
- 7. エラーが発生した場合jboss 5.1.0
- 8. ResponseExceptionが発生した場合
- 9. javax.xml.ws.soap.SOAPFaultExceptionが発生した場合
- 10. エラーが発生した場合(Haskell)
- 11. Subversion:競合が発生した場合に更新が失敗しますか?
- 12. Go:go channelでデッドロックの問題が発生しました
- 13. デッドロックが発生したシーケンシャル番号の生成
- 14. ストーリーボードで競合が発生した場合、Xcodeがクラッシュする
- 15. 「1つのデッドロックを発見」が、トレースは任意のデッドロックが発生したことを
- 16. SafariでJavaScriptエラーが発生した場合は、時々のみ
- 17. プロデューサが例外で終了した場合のPythonマルチプロセッシングキューのデッドロック
- 18. データグリッドビューで変更が発生した場合のデータベースの更新方法
- 19. Sybase ASE:「サーバーコマンドでデッドロックが発生しました」
- 20. py.test assertが発生する可能性があり、発生した場合は__
- 21. Ruby:オープンでデッドロックが発生する
- 22. グループで問題が発生した場合はMSSQL
- 23. 最新のバージョンのFirefoxで問題が発生しました
- 24. foreachループでスマートなエラーが発生した場合その他の場合
- 25. git rebaseの後に新しいコミットが発生した場合の対処法?
- 26. Handle Socket.io NodeでEADDRINUSEエラーが発生しました。エラーが発生した場合は「OK」です
- 27. Googleトークン確認のコールにデッドロックが発生しましたか?
- 28. ブラウザの最新表示で問題が発生しました。
- 29. MacOSの最新テンソルフローソースでTensorflowコンパイルエラーが発生しました
- 30. Jmeterでエラーが発生した場合のスクリプトの再起動
Linux/Windowsのスレッドをデッドロックするのは難しくありません。次回Windows GUIアプリケーションを作成するときは、イベントハンドラにスレッドを作成してすぐに参加させてください。スレッドでは、終了する前にGUIスレッドにSendMessage()を呼び出します。 GUIスレッドは、スレッドが終了するまで、これ以上メッセージを処理しません。 SendMessage()呼び出しが戻るまで、スレッドは終了しません。デッドロック。 –