c# 多组数据 共享 上锁 示例
时间: 2024-12-29 07:29:02 浏览: 6
在C#中,如果你需要在多个线程上共享一组数据并保证其安全,可以使用`Monitor`类或`lock`关键字来实现同步。`lock`关键字是一种轻量级锁定机制,更推荐于简单场景。下面是一个简单的示例:
```csharp
public class SharedData
{
private int sharedValue;
private object lockObject = new object();
public void SetValue(int value)
{
// 获取锁
lock (lockObject)
{
sharedValue = value; // 确保在同一时间只有一个线程访问sharedValue
Console.WriteLine($"值已设置为: {value}");
}
}
public int GetValue()
{
// 获取锁
lock (lockObject)
{
int currentValue = sharedValue;
return currentValue;
}
}
}
// 使用示例
public static void Main(string[] args)
{
var data = new SharedData();
Thread thread1 = new Thread(() => data.SetValue(100));
Thread thread2 = new Thread(() => Console.WriteLine(data.GetValue()));
thread1.Start();
thread2.Start();
thread1.Join();
thread2.Join();
}
```
在这个例子中,`lockObject`充当了互斥锁,确保在`SetValue`和`GetValue`方法中,对`sharedValue`的操作不会同时发生。如果两个线程试图同时修改`sharedValue`,会被阻塞直到其他线程释放锁。
阅读全文