C#一个线程周期发静态变量,一个线程不定期更新静态变量,怎么写代码
时间: 2024-09-17 11:02:24 浏览: 46
在C#中,如果你想要创建一个线程周期性地访问并改变静态变量,另一个线程则不定期地更新这个变量,你可以使用`System.Threading.Timer`和`System.Threading.Thread`。这里是一个简单的示例:
```csharp
using System;
using System.Threading;
// 定义静态变量
public static class SharedState
{
public static int Value = 0;
}
class PeriodicThread
{
private Timer _timer;
public void StartPeriodicExecution(int intervalMilliseconds)
{
_timer = new Timer(UpdateSharedValue, null, intervalMilliseconds, intervalMilliseconds);
}
// 定义定时任务,每隔指定时间修改静态变量
private static void UpdateSharedValue(object state)
{
lock (SharedState) // 需要锁定防止并发修改
{
SharedState.Value++;
Console.WriteLine($"Periodic thread updated value to {SharedState.Value}");
}
}
}
class UpdatingThread
{
public void StartUpdating()
{
Thread.Sleep(5000); // 模拟不定期操作
// 更新静态变量
lock (SharedState) // 同样需要同步对共享资源的操作
{
SharedState.Value += RandomNumberGenerator.GetRandom(); // 假设 RandomNumberGenerator.GetRandom() 返回随机数
Console.WriteLine($"Updating thread set value to {SharedState.Value}");
}
}
}
public class Program
{
public static void Main(string[] args)
{
var periodicThread = new PeriodicThread();
periodicThread.StartPeriodicExecution(1000); // 每秒执行一次
// 创建更新线程
var updatingThread = new UpdatingThread();
updatingThread.StartUpdating();
Console.ReadLine(); // 等待用户按下Enter以结束程序
}
}
```
在这个例子中,`PeriodicThread`每秒钟通过`Timer`增加`SharedState.Value`,而`UpdatingThread`会在启动后等待一段时间再更改值。为了确保线程安全,我们在访问静态变量时都添加了`lock`关键字来避免并发修改带来的数据不一致。
阅读全文