c# 多线程中共享变量 加锁代码
时间: 2023-12-08 16:29:25 浏览: 95
在 C# 多线程编程中,共享变量的访问需要进行加锁,以避免多个线程同时访问同一个变量而导致的数据不一致问题。下面是一个简单的例子,演示了如何在多线程中对共享变量进行加锁:
```csharp
class Program
{
static int counter = 0;
static object locker = new object();
static void Main(string[] args)
{
Thread thread1 = new Thread(IncrementCounter);
Thread thread2 = new Thread(IncrementCounter);
thread1.Start();
thread2.Start();
thread1.Join();
thread2.Join();
Console.WriteLine("Counter: " + counter);
Console.ReadLine();
}
static void IncrementCounter()
{
for (int i = 0; i < 1000000; i++)
{
lock (locker)
{
counter++;
}
}
}
}
```
在这个例子中,我们定义了一个静态变量 `counter` 和一个静态对象 `locker`。在 `IncrementCounter` 方法中,我们使用 `lock` 语句来对 `counter` 进行加锁,以确保只有一个线程可以访问它。最后,我们在 `Main` 方法中启动两个线程并等待它们完成,然后输出 `counter` 的值。
需要注意的是,多线程编程中加锁的开销比较大,因此应该尽量减少加锁的操作。如果有多个共享变量需要加锁,应该尽量将它们分别加锁,避免一个锁导致整个程序的性能下降。
阅读全文