11

DelphiがDelphi2009でTMonitorレコードを導入し、マルチスレッド環境で特定のオブジェクトをロックできるようになったことを非常に嬉しく思います。私を困惑させたのは、このレコードタイプのPulseメソッドとPulseAllメソッドです。

たとえば、DelphiのヘルプのPulseのエントリには、「待機キュー内の次のスレッドに、呼び出し元のスレッドがオブジェクトを解放するとすぐに、指定されたオブジェクトをロックできるようになることを通知します」と記載されています。

本当に?どういう意味ですか?私は問題なくPulseを使用せずにTMonitorを使用しました。さらに、DelphiのソースでのTMonitorの使用の一部は、Pulseを使用しません。

PulseメソッドとPulseAllメソッドは、.NET Monitorクラスとのソースレベルの互換性のためにDelphiのTMonitorレコードにのみ含まれていますか、それとも本当に目的を果たしていますか?

この問題を説明する2つの質問(「TMonitor.PulseとTMonitor.PulseAll」および「DelphiシステムユニットのTMonitorは何に適しているか」)がありますが、私は決定的な答えを探しています。

4

1 に答える 1

4

参照された質問に対する私の回答のウィキペディアのリンクは、モニターの待機/パルス/パルスオール機能の使用についての議論を提供します。スレッドは、待機と呼ばれるモニターに入る必要があります。次に、別のスレッドがモニターに入り、pulseまたはpulseallを呼び出して、最初の待機中のスレッドに信号を送る必要があります。Pulseは1つの待機中のスレッドのみに信号を送りますが、pulseallはすべての待機中のスレッドに信号を送ります。詳細については、ウィキペディアの記事の条件変数のセクションを参照してください。TMonitorのメソッドを説明するRTLソースにもコメントがあります。

于 2011-08-29T02:06:49.843 に答える