在C#中如何利用线程同步机制和计时器来确保共享资源的安全访问?请提供代码示例说明。
时间: 2024-10-31 19:25:24 浏览: 1
要确保共享资源在多线程环境下的安全访问,可以使用锁(例如`lock`语句)来实现线程同步。计时器(如`System.Timers.Timer`)可以用于定期执行任务,而不会阻塞主线程。以下是一个结合锁和计时器实现线程同步的示例:
参考资源链接:[C#多线程深度解析:Threading in C# 中文译版](https://wenku.csdn.net/doc/648d6f469aecc961cb046c69?spm=1055.2569.3001.10343)
首先,我们定义一个共享资源类,并使用锁来保护对这个资源的访问:
```csharp
public class SharedResource
{
private int count = 0;
private readonly object lockObject = new object();
public void Increment()
{
lock (lockObject)
{
count++;
}
}
public int Count
{
get
{
lock (lockObject)
{
return count;
}
}
}
}
```
然后,我们使用计时器来定期执行任务,任务中会安全地访问和修改共享资源:
```csharp
public class SynchronizedTimer
{
private SharedResource sharedResource = new SharedResource();
private Timer timer;
public SynchronizedTimer()
{
timer = new Timer(1000); // 设置计时器每1000毫秒触发一次
timer.Elapsed += OnTimedEvent;
timer.AutoReset = true;
timer.Enabled = true;
}
private void OnTimedEvent(object source, ElapsedEventArgs e)
{
sharedResource.Increment(); // 线程安全地增加计数
Console.WriteLine($
参考资源链接:[C#多线程深度解析:Threading in C# 中文译版](https://wenku.csdn.net/doc/648d6f469aecc961cb046c69?spm=1055.2569.3001.10343)
阅读全文