C# 多线程多个互斥锁
时间: 2023-10-19 09:27:14 浏览: 49
在C#中,可以使用多个互斥锁来实现多线程的同步。互斥锁是一种同步机制,用于保护共享资源,一次只允许一个线程访问被锁定的代码块。下面是使用多个互斥锁的示例代码:
```csharp
using System;
using System.Threading;
class Program
{
static Mutex mutex1 = new Mutex();
static Mutex mutex2 = new Mutex();
static void Main()
{
// 创建两个线程
Thread thread1 = new Thread(DoWork1);
Thread thread2 = new Thread(DoWork2);
// 启动线程
thread1.Start();
thread2.Start();
// 等待两个线程执行完毕
thread1.Join();
thread2.Join();
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
static void DoWork1()
{
Console.WriteLine("Thread 1 is waiting for mutex1...");
mutex1.WaitOne();
Console.WriteLine("Thread 1 acquired mutex1. Doing some work...");
// 模拟耗时操作
Thread.Sleep(2000);
Console.WriteLine("Thread 1 is waiting for mutex2...");
mutex2.WaitOne();
Console.WriteLine("Thread 1 acquired mutex2. Continuing work...");
// 执行一些其他操作
// 释放互斥锁
mutex2.ReleaseMutex();
mutex1.ReleaseMutex();
}
static void DoWork2()
{
Console.WriteLine("Thread 2 is waiting for mutex2...");
mutex2.WaitOne();
Console.WriteLine("Thread 2 acquired mutex2. Doing some work...");
// 模拟耗时操作
Thread.Sleep(2000);
Console.WriteLine("Thread 2 is waiting for mutex1...");
mutex1.WaitOne();
Console.WriteLine("Thread 2 acquired mutex1. Continuing work...");
// 执行一些其他操作
// 释放互斥锁
mutex1.ReleaseMutex();
mutex2.ReleaseMutex();
}
}
```
在上面的示例中,我们创建了两个互斥锁 `mutex1` 和 `mutex2`,并且分别在 `DoWork1` 和 `DoWork2` 方法中使用了这两个互斥锁来保护共享资源。注意,在获取互斥锁之后,需要在适当的时候释放互斥锁,以便其他线程可以获取它们。
请注意,使用多个互斥锁可能会导致死锁问题,因此在设计多线程应用程序时需要小心处理锁的使用顺序和释放顺序,以避免死锁情况的发生。