C# 两个线程访问同一个数组
时间: 2023-08-31 14:13:28 浏览: 162
在C#中,多个线程同时访问同一个数组可能会导致竞态条件和数据不一致的问题。为了避免这些问题,可以使用锁或者其他同步机制来保护共享数据。
以下是一个示例代码,其中两个线程同时访问一个数组,使用lock关键字来保护共享数据:
```
class Program
{
static int[] arr = new int[100];
static object lockObj = new object();
static void Main(string[] args)
{
Thread t1 = new Thread(AddToArray);
Thread t2 = new Thread(AddToArray);
t1.Start();
t2.Start();
t1.Join();
t2.Join();
Console.WriteLine("Array sum: " + arr.Sum());
Console.ReadLine();
}
static void AddToArray()
{
for (int i = 0; i < 50; i++)
{
lock (lockObj)
{
arr[i] += 1;
}
}
}
}
```
在此示例中,我们使用静态数组arr和一个静态对象lockObj来保护共享数据。两个线程分别执行AddToArray方法,该方法使用lock关键字来锁定lockObj对象,以确保每个线程修改数组元素时不会发生冲突。
注意,虽然使用锁可以避免竞态条件和数据不一致的问题,但也可能会降低程序的性能。因此,在保护共享数据时,需要权衡安全和性能的考虑。
阅读全文