2012-01-06 7 views
0

私はスレッドをいくつかのロックでブロックしています。今はいくつかの状態では、C#のスレッドを殺したいです。 しかし、問題はthread.abortではスレッドを強制終了しないということです。状態をブロックしているスレッドを殺す

+3

OK、質問したい質問はありますか? –

+4

デッドロックの原因となるバグを修正する方が良いのでしょうか? –

+2

スレッドがなぜそれを待っているのか少し説明できますか?ところで、スレッドがMSDNのドキュメントで終わらないことについての非常に明確な説明があります:http://msdn.microsoft.com/en-us/library/ty8d3wta.aspx –

答えて

2

実際にスレッドの死を保証したい場合は、新しいプロセスを開始することをお勧めします。

thread.abortの可能性のある落とし穴の多くについて議論する素晴らしいスレッドがありますhere

+0

私はこの文章を直接適用すると思います:*「私が常時推奨しているアプローチは、単純で死んでいます。ワーカースレッドとUIスレッドの両方に表示される揮発性ブールフィールドを持ちます。 * –

+0

ほとんどの場合、OPがスレッド上で本質的にデッドロックされていることを除いて私は同意しますが、この場合、フラグの状態をチェックする方法はありません。 –

+1

ロックとループの最大待機時間を設定できます。次のようなものがあります: 'while(!getLock(waitMs)){if(キャンセル)return false; } ... ' –

1

スレッドがデッドロックに遭遇したときに決定論的な方法でスレッドを強制終了すると仮定します。右 ? はいthread abortは終了を保証するものではありませんが、Thread.Abortを使用することはほとんど常に悪い考えです。 スレッドを瞬時に終了させる方法があれば、より大きな問題につながる可能性があります。このスレッドがいくつかのリソースをロックした場合、コミットされていないトランザクションなどの途中で、これらのリソースを保持するスレッドが突然終了した場合、他のスレッドはこれらのリソースを処理できません。 私が与えることができる最も良い提案は、デッドロックの問題をマスキングするのではなく修正することです。

+0

おかげでHenk Holterman – rakesh

関連する問題