1

いくつかのリソースに同時にアクセスしようとしているので、lock.

object lockObject = new object();
lock(lockObject)
{
    //Acquire some resources and do some operations  
}
//Pulse only the most recently joined thread in waiting list

しかし、私が望むのは、最後のスレッド (待機リストに最近参加したスレッド) のみをパルスし、他のスレッドを無視することです (デッドロック、中止、飢餓はここでは問題になりません)。私が考えることができる 1 つのオプションは、メッセージ キューを使用し、最後のメッセージを処理する以外のすべてのメッセージを無視することです。それ以外に、最後のスレッドを単純にパルスして、他のスレッドを無視するにはどうすればよいですか?

4

1 に答える 1

1

これを実装するには多くの方法があります。これが1つの方法です。

各スレッドがリソースを「待機」するために呼び出す「スレッドマネージャー」があります。

このスレッド マネージャーは、基本的にWaitHandlesのStackを管理します。スレッドがマネージャーを呼び出すと、新しい が作成され、それがスタックにプッシュされ、インスタンスがスレッドに渡され、待機できるようになります。WaitHandle

コードが最後に待機しているスレッドを にさせたい場合pulse、スタックから最上位の待機ハンドルをポップしますsignal

(このアーキテクチャは、WaitHandle で待機する呼び出しスレッドに依存していることに注意してください。)

HTH

于 2012-12-06T06:56:50.673 に答える