C# parallel forench 加锁
时间: 2023-11-14 08:07:10 浏览: 208
加锁实现线程同步代码...
在 C# 中,Parallel.ForEach 方法并行地迭代集合元素,可以使用锁来保护共享资源的访问。下面是一个示例代码:
```csharp
using System;
using System.Collections.Generic;
using System.Threading;
class Program
{
static List<int> numbers = new List<int>();
static object lockObject = new object();
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
numbers.Add(i);
}
Parallel.ForEach(numbers, (number) =>
{
lock (lockObject)
{
Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId} processed {number}");
// 在这里进行需要保护的共享资源的访问操作
}
});
Console.ReadLine();
}
}
```
在上面的代码中,我们通过使用 lock 语句来对共享资源进行加锁保护。在 Parallel.ForEach 的委托中,首先获取到 lockObject 的锁,然后执行需要保护的共享资源的访问操作。这样可以确保每个线程在访问共享资源时都会按顺序进行,并避免出现竞态条件和数据不一致的问题。
阅读全文