C#多线程间互斥的方法
时间: 2023-07-26 09:10:02 浏览: 141
C# 多线程的同步与互斥(使用Mutex和Event)
在 C# 中,可以使用锁 (lock) 语句来实现多线程间的互斥操作。锁语句用于保护共享资源,防止多个线程同时对其进行访问和修改。
锁语句的基本语法如下:
```
lock (lockObject)
{
// 线程安全的代码块
}
```
其中,`lockObject` 是一个对象实例,用于表示被保护的共享资源。在执行锁语句时,如果当前对象没有被锁定,则该对象被锁定,并且线程可以进入代码块执行线程安全的操作。如果当前对象已经被锁定,则线程将被阻塞,直到该对象被释放为止。
在使用锁语句时,需要注意以下几点:
1. 锁对象应该是所有线程共享的,否则锁语句不起作用。
2. 锁对象应该是引用类型,否则锁语句不起作用。
3. 锁对象应该是唯一的,否则会出现死锁的情况。
4. 锁语句应该放在需要保护的代码块周围,而不是整个方法或类中。
下面是一个简单的示例代码,演示了如何使用锁语句实现多线程间互斥:
```
class Program
{
static int counter = 0;
static object lockObject = new object();
static void Main(string[] args)
{
Thread t1 = new Thread(Increment);
Thread t2 = new Thread(Increment);
t1.Start();
t2.Start();
t1.Join();
t2.Join();
Console.WriteLine("Counter: {0}", counter);
}
static void Increment()
{
for (int i = 0; i < 100000; i++)
{
lock (lockObject)
{
counter++;
}
}
}
}
```
在这个示例中,我们定义了一个静态变量 `counter`,用于记录计数器的值。我们还定义了一个静态对象 `lockObject`,用于表示被保护的共享资源。在 `Increment` 方法中,我们使用锁语句保护对 `counter` 变量的访问和修改。在 `Main` 方法中,我们创建了两个线程分别执行 `Increment` 方法,并等待它们执行完毕后输出计数器的值。
阅读全文