0

とにかく、現在待機中のスレッドが接続されずに長時間待機しているかどうかを検出できる F# はありますか?

私は、スレッドが他の待機中のスレッドにアクティブに連絡して、作業が完了したらそのスレッドに渡す必要がある場合があります。私の解決策は、他のスレッドがそれらに連絡しないために、1 つまたは複数のスレッドが長時間待機し、最終的にプログラムがデッドロックするというバグがどこかにあることです。

待機中のスレッドが単に長時間待機しているかどうかを検出することで、他のスレッドが渡されるのを待ち続けるのではなく、利用可能な作業を積極的に探しに行くようになると思います。

4

1 に答える 1

1

スレッドを単に終了するよりも、スレッドが停止する理由を理解しようとする方がよいでしょう。アタッチされた Visual Studio デバッガーでこれを再現できる場合は、[一時停止] ボタンをクリックし、[スレッド] ウィンドウを使用して、すべてのスレッドがどのコードに含まれているかを確認できます。

そうは言っても; それでもこれを行う必要がある場合、解決策はスレッドの管理方法によって異なります。それらを外部から監視するには、スレッドのリストと、スレッドが停止しているかどうかを判断できるプロセスが必要です。

このThreadクラスには、スレッドとそのコントロールの間で状態を共有するためのメカニズムが組み込まれていないようですName。名前を悪用することもできますが、ConcurrentDictionary<Thread, DateTime>すべてのスレッドと最後の通信のタイムスタンプを格納するためのスレッド セーフなコレクション (たとえば a ) をAction用意し、開始時に各スレッドに an を渡して、" Ping"アクションを定期的に呼び出すことによって。アクションは、DateTimeそのスレッドに対して格納されているものを更新するだけです。

次に、制御プロセスは、辞書を定期的にスキャンして、タイムスタンプが古すぎるものを探し、そのスレッドが死んでいると宣言しますAborts()

スレッドを生成する方法を正確に把握せずにコード サンプルを提供することは困難であり、スレッドが「接続されている」ことの意味をより詳細に説明することは困難です。

于 2013-11-02T12:13:00.240 に答える