C#のマルチスレッド同期の方法は?

C#におけるマルチスレッド同期メソッドは、以下のとおりです。

  1. ロックの使用:複数のスレッドが共有リソースにアクセスする場合は、lock キーワードを使用して排他ロックを作成できます。あるスレッドがロックを獲得すると、他のスレッドはそれがロックを解放するまでブロックされます。
// 定义一个共享资源
private static object lockObject = new object();

// 在访问共享资源的地方使用lock关键字
lock(lockObject)
{
    // 这里是需要同步的代码块
}
  1. 排他ロック(Mutex)を使う: 排他ロックは異なるプロセスやスレッド間で共有することができ、共有リソースへの複数のスレッドのアクセスを保護するために使用できます。
// 创建一个互斥锁
Mutex mutex = new Mutex();

// 在需要同步的代码块中使用互斥锁
mutex.WaitOne(); // 等待获取互斥锁
// 这里是需要同步的代码块
mutex.ReleaseMutex(); // 释放互斥锁
  1. セマフォを使用する。セマフォは、1 つ以上のスレッドによる共有リソースへのアクセスを制御するためのカウンターです。セマフォの初期カウント値を設定でき、`WaitOne` メソッドを使用するとセマフォのカウント値が減少するまで待機し、`Release` メソッドを使用するとセマフォのカウント値が増加します。
// 创建一个初始计数为1的信号量
Semaphore semaphore = new Semaphore(1, 1);

// 在需要同步的代码块中使用信号量
semaphore.WaitOne(); // 等待信号量计数值减少
// 这里是需要同步的代码块
semaphore.Release(); // 增加信号量计数值
  1. SpinLockを使う:SpinLockは「ビジーウェイティング」という同期メカニズムの一種で、あるスレッドがロックを取ろうとしたときに、ロックがすでに他のスレッドに取得されていたら、ロックの取得に成功するまでそのスレッドはループを回してロックの取得を試みる。
// 创建一个自旋锁
SpinLock spinLock = new SpinLock();

// 在需要同步的代码块中使用自旋锁
bool lockTaken = false;
spinLock.Enter(ref lockTaken); // 尝试获取自旋锁
// 这里是需要同步的代码块
spinLock.Exit(); // 释放自旋锁

これらのメソッドはどれもマルチスレッド同期を実現できます。具体的なメソッドの使い分けは、具体的なニーズとシナリオによって異なります。

bannerAds