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

眺める: 2976|答える: 2

[出典] C#の怠惰がスレッドを安全に保つ方法

[リンクをコピー]
掲載地 2023/07/02 21:41:55 | | |
.NET 4.0以降、.NET Frameworkで安全なレイジーロード型が提供されました怠惰
Lazyはマルチスレッド環境で動作することが保証されていますGetValue(価値取得)関数は一度だけ実行されるため、実装されますシングルトンモード

過去には、シングルトンパターンの実装やクラスの静的初期化関数を利用するために二次判断ロックを用いていました
Lazyタイプではこのプロセスが簡素化され、パフォーマンスも向上します

Lazyが作成されたら、スレッドインストールモードを指定できます。現在、2つのモードがあります。出版のみ起訴と出版

出版のみモード


1. 初期化関数を実行し、内部にボックス化します型、零値判断の問題を解く。ケースが作成されていれば、無を返します。このプロセスはスレッドインセキュアです

2. m_boxedが空であるかを判定します。m_boxedが値によって保存される場です。もし空ならボックス化に設定します。この方法で原子性を保証できます。このプロセスはスレッドセーフです

3. CreateValueが空を返す場合、他のスレッドがすでにインスタンスを作成していることを意味します。次に、すでに作成されたインスタンスに設定します

4. 初期化メソッドを初期化済みとしてマークし、通常は同時実行時に起こり、CreateValueを複数回実行します


出版のみモードは以下に基づいて使用されます。Interlocked.CompareExchangeこのクラスには原子性メソッドが含まれていますCAS(比較・交換)

CASはCPUが提供する原子命令を用いて実装され、ランタイムバージョンによって異なる実装が施されることがあります
インターロックされた特定の実装では、ネイティブ方式で興味のある友人がcoreclr/jvmコードを通じて特定の実装を確認できます

このモードでは、シングルトン関数は複数回実行できますが、最終的には1つのインスタンスのみが確保されます

執行および出版モード

起訴と出版モードで使用されるモードVolatile+Monitorモニターそうです文の実装であるネイティブコードのMonitor実装は、ヘビーウェイトロックです

モニターキュースリープとスレッドスリープがサポートされており、これによりメソッドブロック全体がシングルスレッド状態で実行されることを保証できます


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




先の:ThreadStatic、CallContext、HttpContextの違い ASP.NET
次に:SQL Serverはデータベースへの現在の接続数を照会します
 地主| 掲載地 2023/07/02 21:42:16 |
 地主| 掲載地 2023/07/04 19:19:45 |
C#パフォーマンス最適化:Lazyは遅延を伴ってLazy<T>を初期化します
https://www.itsvse.com/thread-7700-1-1.html
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com