現在のスレッドに割り当てられたタスクが終了するまで、他のスレッドを中断することなく、一度に 1 つのスレッドのみでリソースを利用できるようにする手法は、C# では同期と呼ばれます。実際には、マルチスレッド プログラムでは、必要な時間だけスレッドからどのリソースにもアクセスできます。リソースはスレッドによって共有され、非同期で実行されます。これは重要なタスクであり、システムの停止につながる可能性があるため、スレッドは同期的に実行する必要があります。また、スレッドを同期することで、スレッドの一貫性を維持し、1 つのスレッドの実行中に他のスレッドが干渉しないようにすることができます。
以下は C#Thread 同期の構文です。
Thread thread_name = new Thread(method_name); thread_name.Start(); thread_name.Join();
または
Thread thread_name = new Thread(method_name); thread_name.Start(); method_name() { lock(this) { //thread_name thread is executed } }
ここで、thread_name はスレッドの名前、method_name は thread_name.Start() が呼び出された時点からこのスレッドのみによってアクセスされるメソッドの名前であり、thread_name.Join() はこのスレッドが完了するまで待機します。他のすべてのスレッドの実行を停止します。
メソッド内の Lock キーワード、method_name は、現在のスレッドが完了するまで他のスレッドがメソッドにアクセスできないように、スレッドの実行をロックします。
以下は C# スレッド同期の例です:
join キーワードを使用したスレッドの同期を示す C# プログラム。
コード:
using System; using System.Threading; //a namespace called program is created namespace program { //a class called check is defined class check { //main method is called static void Main(string[] args) { //an instance of the thread class is created which operates on a method Thread firstthread = new Thread(secondfunction); //start method is used to begin the execution of the thread firstthread.Start(); //join method stops all other threads while the current thread is executing firstthread.Join(); Thread secondthread = new Thread(firstfunction); secondthread.Start(); secondthread.Join(); } private static void firstfunction(object obj) { for(inti=1;i<3;i++) { Console.WriteLine("First function is executed two times in a row because join method is called on the second thread operating on this method."); } } private static void secondfunction(object obj) { for(inti=1;i<3;i++) { Console.WriteLine("Second function is executed two times in a row because join method is called on the first thread operating on this method."); } } } }
出力:
説明: 上記のプログラムでは、program という名前空間が作成されます。次に、check というクラスが定義され、その中で main メソッドが呼び出されます。次に、メソッドを操作するためのスレッドのインスタンスが作成されます。このメソッドは Start() メソッドを使用して開始され、同じスレッド上で join() メソッドが使用されて、その実行が他のスレッドによって中断されないようにします。したがって、出力は同期して 1 行に表示されます。プログラムの出力は上のスナップショットに示されています。
lock キーワードを使用したスレッドの同期を示す C# プログラム。
コード:
using System; using System.Threading; //a class called create is created class create { public void func() { //lock is called on this method lock (this) { for (inti = 1; i<= 2; i++) { Console.WriteLine("The thread is executing"); } } } } class check { public static void Main(string[] args) { //an instance of the create class is created create c = new create(); //an instance of the thread class is created which operates on the method in another class Thread firstthread = new Thread(c.func); firstthread.Start(); Thread secondthread = new Thread(c.func); secondthread.Start(); } }
出力:
説明: 上記のプログラムでは、create と呼ばれるクラスが作成されます。このクラスでは、lock キーワードを使用したメソッドが定義されています。これは、このメソッド上で動作するスレッドが、このメソッドを操作するスレッド自体がメソッドをロックするまでロックすることを意味します。他のスレッドがメソッドにアクセスすることを許可せずに実行を完了します。このようにして、スレッドは同期的に実行されます。プログラムの出力は上のスナップショットに示されています。
このチュートリアルでは、プログラミング例とその出力を通じて、スレッド同期の定義、構文、動作を通じて C# の ThreadSynchronization の概念を理解します。
これは C# スレッド同期のガイドです。ここでは、C# スレッド同期の概要とその動作について、例とコード実装とともに説明します。詳細については、他の推奨記事を参照することもできます –
以上がC# スレッドの同期の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。