C#一个线程周期发静态变量,一个线程不定期更新静态变量,怎么用lock object写代码
时间: 2024-09-17 11:02:22 浏览: 47
在C#中,如果你有一个静态变量需要在两个线程之间安全地访问,同时一个是定期更新,另一个是周期性读取,你可以使用`Monitor`类提供的`Enter()`和`Exit()`方法以及`lock`关键字来实现同步。这里是一个简单的示例:
```csharp
using System;
using System.Threading;
public class MyClass
{
private static object _syncLock = new object();
public static int SharedVariable;
// 定期更新静态变量的线程方法
public static void UpdateThread()
{
while (true) // 假设这是一个无限循环
{
lock (_syncLock)
{
SharedVariable += 1; // 更新变量
}
Thread.Sleep(1000); // 每秒更新一次
}
}
// 周期性读取静态变量的线程方法
public static void ReadThread()
{
while (true)
{
lock (_syncLock)
{
Console.WriteLine($"Current value of shared variable: {SharedVariable}");
}
Thread.Sleep(5000); // 每5秒读取一次
}
}
public static void Main(string[] args)
{
Thread updateThread = new Thread(UpdateThread);
Thread readThread = new Thread(ReadThread);
updateThread.Start(); // 启动更新线程
readThread.Start(); // 启动读取线程
// 等待主线程结束,以便查看完整的过程
Console.ReadLine();
}
}
```
在这个例子中,我们创建了一个锁`_syncLock`,每次对`SharedVariable`进行修改或读取时,都会通过`lock(_syncLock)`获取锁,确保同一时间只有一个线程能够执行与变量相关的操作。这样就避免了并发修改造成的数据不一致问题。
阅读全文