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

眺める: 24412|答える: 1

[出典] C#スレッドが学習するManualResetEventとAutoResetEventの違い

[リンクをコピー]
掲載地 2018/05/31 14:59:47 | | | |
まずはManualResetEventについて話し、議論の中でAutoResetEventの内容をいくつか挿入して比較します。

ManualResetEventは、ManualResetEventに現在のスレッドのブロックをやめるよう指示する信号が届くまで、1つ以上のスレッドをブロックできます。

ManualResetEvent に関する情報

.net/c# スレッドスレッド 一時停止と再開 旧式のソリューション
https://www.itsvse.com/thread-4769-1-1.html
(出典:Architect_Programmer)


ManualResetEvent オブジェクトに、現在のスレッドをブロックするかどうかを制御するブール型プロパティ IsRelease を持つと想像してください。 このプロパティは初期化時に設定できます。例えばManualResetEvent event=new ManualResetEvent(false); これはデフォルトのプロパティが現在のスレッドをブロックすることを示しています。

コード例:



ここでManualResetEventとAutoResetEventの重要な違いに注目してください:

手動は確実にスレッド1とスレッド2の両方に信号を送ります。自動はランダムに1つにしか信号を送れません。

なぜ一方はマニュアル、もう一方はオートと呼ばれているのでしょうか? これは多くの人が抱く疑問だと思います。これからこの質問を見ていきます。

ただnow_manualResetEvent。 Set(); この文は誰もが理解していると思いますが、これはIsReleaseの特性を真に設定していると見なせるでしょう

_manualResetEvent.WaitOne(); 信号を受け取った後にスレッド1をブロックしなくなりました。 IsReleaseの価値はその後のプロセス全体を通じて真実です。もし

IsReleaseの値をfalseに戻したい場合は、再度_manualResetEvent.Reset()メソッドを呼び出す必要があります。

もし_autoResetEvent.set()であれば、_autoResetEvent.WaitOne()は自動的にIsReleaseの値をfalseに設定します。

だから一方はオート、もう一方はマニュアルと呼ばれているのです。



テストコード:







先の:. .NETで最も高速なOOMオブジェクトマッピングコンポーネント、Tiny Mapper(プロジェクト運用)
次に:C# DEBUG デバッグ情報の印刷と詳細な説明の出力
 地主| 掲載地 2024/12/18 20:30:44 |
ManualResetEvent と AutoResetEvent はどちらもイベント待機ハンドル、下図に示されているように:



参考:ハイパーリンクのログインが見えます。

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

Mail To:help@itsvse.com