C# 多线程操作同一个数组
时间: 2023-06-28 16:11:28 浏览: 72
在 C# 中,多线程操作同一个数组可以使用锁(lock)来保护共享资源不被多个线程同时访问和修改。
下面是一个简单的示例代码:
```csharp
class Program
{
static void Main(string[] args)
{
int[] arr = new int[1000];
object lockObj = new object(); // 锁对象
// 创建 10 个线程,每个线程对数组进行 100 次递增操作
for (int i = 0; i < 10; i++)
{
Thread t = new Thread(() =>
{
for (int j = 0; j < 100; j++)
{
lock (lockObj) // 加锁
{
arr[j]++;
}
}
});
t.Start();
}
// 等待所有线程结束
Thread.Sleep(1000);
// 输出数组的值
for (int i = 0; i < 1000; i++)
{
Console.Write("{0} ", arr[i]);
}
}
}
```
在上面的代码中,我们使用了一个 `lockObj` 对象作为锁,然后在对数组进行修改的时候,使用 `lock (lockObj)` 语句块来加锁,保证同一时间只有一个线程能够访问和修改数组。
需要注意的是,使用锁虽然可以保证多线程操作同一个数组的安全性,但是也会带来一些性能上的损失,因为每次操作数组都需要加锁和解锁,造成了一定的开销。因此,在实际应用中,需要根据具体情况进行权衡和优化。