マルチスレッドプログラミング シングルスレッドと比較すると、スレッドの安全性の問題という特有の問題があります。いわゆるスレッド セーフティとは、コードが配置されているプロセスで複数のスレッドが同時に実行されている場合、これらのスレッドがこのコードを同時に実行できることを意味します。各実行の結果がシングルスレッド実行の結果と同じであり、他の変数の値も期待どおりである場合。 スレッドの安全性の問題は、グローバル変数と静的変数によって引き起こされます。
マルチスレッド状況で静的変数にアクセスする際のセキュリティを確保するために、以下に示すように、ロック機構を使用してそれを保証できます:
//ロックする必要がある静的グローバル変数
private static bool _isOK = false; //lock只能锁定一个引用类型变量 private static object _lock = new object(); static void MLock() { //多线程 new System.Threading.Thread(Done).Start(); new System.Threading.Thread(Done).Start(); Console.ReadLine(); } static void Done() { //lock只能锁定一个引用类型变量 lock (_lock) { if (!_isOK) { Console.WriteLine("OK"); _isOK = true; } } }
It should Lock は参照型の Live オブジェクトのみをロックできることに注意してください。さらに、ロック メカニズムに加えて、C# の上位バージョンでは、以下に示すように、スレッドの安全性を確保するために async メソッドと await メソッドが追加されました:
public static class AsynAndAwait { //step 1 private static int count = 0; //用async和await保证多线程下静态变量count安全 public async static void M1() { //async and await将多个线程进行串行处理 //等到await之后的语句执行完成后 //才执行本线程的其他语句 //step 2 await Task.Run(new Action(M2)); Console.WriteLine("Current Thread ID is {0}", System.Threading.Thread.CurrentThread.ManagedThreadId); //step 6 count++; //step 7 Console.WriteLine("M1 Step is {0}", count); } public static void M2() { Console.WriteLine("Current Thread ID is {0}", System.Threading.Thread.CurrentThread.ManagedThreadId); //step 3 System.Threading.Thread.Sleep(3000); //step 4 count++; //step 5 Console.WriteLine("M2 Step is {0}", count); } }
タイミング図では、2 つのスレッドが相互作用していることがわかります。下図に示す Show:
async と await を使用した後の上記コードの実行シーケンスは下図のようになります。
グローバル変数と静的変数の読み取り操作のみの場合各スレッドで実行されますが、書き込み操作は行われません。一般的に、このグローバル変数はスレッドセーフです。複数のスレッドが変数に対して読み取りおよび書き込み操作を同時に実行する場合は、通常、スレッドの同期を考慮する必要があります。そうしないと、スレッドの安全性が損なわれる可能性があります。影響を受けました
以上がC# がマルチスレッド下でスレッドの安全性を確保する方法を共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

C#.NET開発を開始するには、次のことが必要です。1。C#の基本的な知識と.NETフレームワークのコア概念を理解する。 2。変数、データ型、制御構造、関数、クラスの基本概念をマスターします。 3。LINQや非同期プログラミングなど、C#の高度な機能を学習します。 4.一般的なエラーのためのデバッグテクニックとパフォーマンス最適化方法に精通してください。これらの手順を使用すると、C#.NETの世界に徐々に浸透し、効率的なアプリケーションを書き込むことができます。

C#と.NETの関係は切り離せませんが、同じものではありません。 C#はプログラミング言語であり、.NETは開発プラットフォームです。 C#は、コードの書き込み、.NETの中間言語(IL)にコンパイルされ、.NET Runtime(CLR)によって実行されるために使用されます。

C#.NETは、複数のアプリケーション開発をサポートする強力なツールとライブラリを提供するため、依然として重要です。 1)C#は.NETフレームワークを組み合わせて、開発を効率的かつ便利にします。 2)C#のタイプの安全性とゴミ収集メカニズムは、その利点を高めます。 3).NETは、クロスプラットフォームの実行環境とリッチAPIを提供し、開発の柔軟性を向上させます。

c#.netisversatileforbothwebanddesktopdevelopment.1)forweb、useasp.netfordynamicapplications.2)fordesktop、equindowsorwpfforrichinterfaces.3)usexamarinforcross-platformdeveliment、enabling deshacrosswindows、

C#と.NETは、継続的な更新と最適化を通じて、新しいテクノロジーのニーズに適応します。 1)C#9.0および.NET5は、レコードタイプとパフォーマンスの最適化を導入します。 2).Netcoreは、クラウドネイティブおよびコンテナ化されたサポートを強化します。 3)ASP.Netcoreは、最新のWebテクノロジーと統合されています。 4)ML.NETは、機械学習と人工知能をサポートしています。 5)非同期プログラミングとベストプラクティスはパフォーマンスを改善します。

c#.netissuitableforenterprise-levelApplicationsとsystemduetoitsSystemdutyping、richlibraries、androbustperformance.

.NETでのC#のプログラミングプロセスには、次の手順が含まれます。1)C#コードの作成、2)中間言語(IL)にコンパイルし、3).NETランタイム(CLR)によって実行される。 .NETのC#の利点は、デスクトップアプリケーションからWebサービスまでのさまざまな開発シナリオに適した、最新の構文、強力なタイプシステム、および.NETフレームワークとの緊密な統合です。

C#は、Microsoftによって開発された最新のオブジェクト指向プログラミング言語であり、.NETフレームワークの一部として開発されています。 1.C#は、カプセル化、継承、多型を含むオブジェクト指向プログラミング(OOP)をサポートしています。 2。C#の非同期プログラミングは非同期を通じて実装され、適用応答性を向上させるためにキーワードを待ちます。 3. LINQを使用してデータ収集を簡潔に処理します。 4.一般的なエラーには、null参照の例外と、範囲外の例外インデックスが含まれます。デバッグスキルには、デバッガーと例外処理の使用が含まれます。 5.パフォーマンスの最適化には、StringBuilderの使用と、不必要な梱包とボクシングの回避が含まれます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

Dreamweaver Mac版
ビジュアル Web 開発ツール
