この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 17115|答える: 0

[通信] .net/c#におけるAutoResetEventの詳細な説明

[リンクをコピー]
掲載地 2018/03/20 13:19:01 | | |

スレッド関連の概念
1. スレッド同期
ManualResetEvent
Set() メソッドは状態を「Signaled」に設定します
Reset() は信号なしに設定します
WaitOne() は信号が入るまでブロックし、WaitOneを呼び出す時点で信号があればブロックしません
AutoResetEvent
ManualResetEventとの違いは、AutoResetEvent.WaitOne()がイベントオブジェクトの状態を自動的に変更する点です。つまり、AutoResetEvent.WaitOne()が実行されるたびにイベントの状態が変化します。 信号 - >信号なし; 電波がない – >は電波がある
example:


  
myResetEven.Set()は実際にはスイッチに相当しますが、set()メソッドが実行されない場合、次のwaitOne()は通知を待って実行できないため、waitOne後の文は実行されません。
モニター法
Wait() Pulse() メカニズムはスレッド間相互作用に使われ、オブジェクトがMonitor.Wait(を出力すると、アクセスしているスレッドは待機状態のままになります)。 起きる合図が鳴るまでは。 Monitor.Pulse()は待機スレッドに信号を送信するために使われます。
つまり、Monitor.Enter()とMonitor.Exit()の間の重要な領域で、オブジェクトのロックを解除し現在のスレッドをブロックするために、キュー内の待機状態にあります。

LockはMutexとは異なります
複数スレッド間のロック同期
Mutexプロセス間の複数スレッドの同期、または複数のプロセスの同期
.Netのマルチスレッドプログラミングでは、AutoResetEventとManualResetEventのクラスがよく使われ、使い方は非常に似ていますが違いがあります。 Setメソッドは信号を送信状態に、Setメソッドは信号を非送信状態に、WaitOneは信号の送信を待ちます。 構成体の初期状態はパラメータ値によって決定でき、それが真ならブロッキングでなく、falseはブロッキング状態です。 スレッドがWaitOneメソッドを呼び出すと、スレッドは送信状態にある時点で信号を受け取り、下方向に実行を続けます。 違いは、呼び出し後、AutoResetEvent.WaitOne()は一度に1つのスレッドしか入れず、スレッドが信号を受け取ると自動的に信号をノー送信状態にし、WaitOneを呼び出す他のスレッドは待ち続けるしかできないことです。 つまり、AutoResetEventは一度に1つのスレッドだけを起動します。 ManualResetEventは複数のスレッドを起動できます。なぜなら、あるスレッドがManualResetEvent.Set()メソッドを呼び出すと、WaitOneを呼び出す他のスレッドは実行継続の信号を受け取り、ManualResetEventは自動的に送信を停止するシグナルを設定しないからです。 つまり、ManualResetEvent.Reset() メソッドが手動で呼び出されない限り、ManualResetEvent はシグナルを保持し、ManualResetEvent は複数のスレッドを同時に起動して実行を継続できます。




先の:.harファイル解析ツールとHARViewer
次に:Zookeeper分散ロック実装
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com