0

私たちのアプリケーションには、ネットワーク上のものを含め、ファイルシステムの変更をリスンするサブシステムがあります。場合によっては、おそらくネットワークがストレス下にあるときに、リスニングスレッドが邪魔になることがあります。ここでの議論は、誤ったスレッド同期によって引き起こされるデッドロックではないことを強調します。スレッドは、CreateFileへの最初の呼び出し、またはその後のファイルシステムAPIの呼び出しのいずれかでスタックになってしまいます。問題は、そのようなスレッドで何をするかです。デッドスレッドとは何か(デッドロックではない)?

特定のスレッドが一定期間無効であると判断して終了することができます。しかし、権威のある人々は、それは非常に悪いと言いますが、私は死んだスレッドを維持する理由が理解できないのですが、それを終了するよりも優れています。それから私は、スレッドで割り当てられたいくつかのリソース、例えばファイルハンドルをリリースできると思った。

私は、ファイルハンドルを閉じ、デッドスレッドによって割り当てられたメモリを解放するスレッドクリーナーを作成しました。しかし、すぐに私は、クリーナーのスレッドがCloseHandle APIへの呼び出しでそれ自身に固執してしまったことに気づいた。 CloseHandleが立ち往生できないと確信していたので、私は本当にショックを受けました。

アプリケーションが長時間動作し、ネットワークまたはその一部に問題が残っていると、多くのシステムリソースを持つ多数のデッドスレッドが発生する可能性があります。 !

+0

を参照してください。スレッドが強制的に停止するのは悪いですが、どのような状態になっているのか、どのスレッドがロックされているのか、どのファイルが開いているのかなどは分かりませんが、スレッドを_stop_することは提案していません。あなたが制御できない理由のため、すでに停止しているスレッドをどのように破壊するかを尋ねています。 –

+0

@jamesしかし、私は実際に停止したスレッドがどの状態にあるのか分からない! I/O要求を実行すると、内部的に私が気づいていないクリティカルセクションに入る可能性があります。 'CloseHandle'が同じクリティカルセクションにアクセスすると、これはなぜ私の"クリーナー "スレッドも停止したことを説明することができます。あなたが言及したすべての注意は私の場合にも当てはまります。 – Ilia

+0

スレッドが停止すべきではないときにスレッドが停止し、なぜBad Thingであるのかわからないという事実。それについては疑いがない。私はあなたがおそらく停止したスレッドを破壊することによって状況を悪化させないと言っているだけです。 –

答えて

-1

「のThread.sleep(0) 高度なパフォーマンスの調整のための生産コードで時折便利ですまた、スレッドの安全性の問題を発見する手助けするための優れた診断ツール です:。 のThread.sleep(0)どこにでも挿入する場合あなたのコードでは、プログラムを作成するか、または中断します。 にはほぼ確実にバグがあります。

は、私はそれらの「権威の人々は」誰であるか知らないが、おそらくあなたは、彼らはあなたに言った誤解https://msdn.microsoft.com/en-us/library/orm-9780596527570-03-19.aspx

+0

あなたの答えは質問に関連していません。 – Ilia

+0

こんにちは、私はそれを知っています...しかし、これはちょっとした問題を解決するでしょう...これ以上のスレッドはありません...私はまだこの件について研究しています...幸運。 – mughrabi

関連する問題