C# スレッドの同期

WBOY
リリース: 2024-09-03 15:25:55
オリジナル
430 人が閲覧しました

現在のスレッドに割り当てられたタスクが終了するまで、他のスレッドを中断することなく、一度に 1 つのスレッドのみでリソースを利用できるようにする手法は、C# では同期と呼ばれます。実際には、マルチスレッド プログラムでは、必要な時間だけスレッドからどのリソースにもアクセスできます。リソースはスレッドによって共有され、非同期で実行されます。これは重要なタスクであり、システムの停止につながる可能性があるため、スレッドは同期的に実行する必要があります。また、スレッドを同期することで、スレッドの一貫性を維持し、1 つのスレッドの実行中に他のスレッドが干渉しないようにすることができます。

C# スレッド同期の構文

以下は 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 キーワードと lock キーワードを使用して実行できます。
  • スレッドで join キーワードが使用されると、そのスレッドは他のスレッドを中断することなく実行を完了できます。
  • lock キーワードを使用すると、スレッドが実行を完了するまで、スレッドが実行中のリソースがロックされます。

C# スレッド同期の実装例

以下は C# スレッド同期の例です:

例 #1

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.");
}
}
}
}
ログイン後にコピー

出力:

C# スレッドの同期

説明: 上記のプログラムでは、program という名前空間が作成されます。次に、check というクラスが定義され、その中で main メソッドが呼び出されます。次に、メソッドを操作するためのスレッドのインスタンスが作成されます。このメソッドは Start() メソッドを使用して開始され、同じスレッド上で join() メソッドが使用されて、その実行が他のスレッドによって中断されないようにします。したがって、出力は同期して 1 行に表示されます。プログラムの出力は上のスナップショットに示されています。

例 #2

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();
}
}
ログイン後にコピー

出力:

C# スレッドの同期

説明: 上記のプログラムでは、create と呼ばれるクラスが作成されます。このクラスでは、lock キーワードを使用したメソッドが定義されています。これは、このメソッド上で動作するスレッドが、このメソッドを操作するスレッド自体がメソッドをロックするまでロックすることを意味します。他のスレッドがメソッドにアクセスすることを許可せずに実行を完了します。このようにして、スレッドは同期的に実行されます。プログラムの出力は上のスナップショットに示されています。

結論

このチュートリアルでは、プログラミング例とその出力を通じて、スレッド同期の定義、構文、動作を通じて C# の ThreadSynchronization の概念を理解します。

おすすめ記事

これは C# スレッド同期のガイドです。ここでは、C# スレッド同期の概要とその動作について、例とコード実装とともに説明します。詳細については、他の推奨記事を参照することもできます –

  1. C# の乱数ジェネレーター
  2. Java の静的コンストラクター
  3. C# の TextWriter
  4. C# の静的コンストラクター

以上がC# スレッドの同期の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート