c# monitor
时间: 2024-08-24 09:01:07 浏览: 36
C# 中的 Monitor 是一个同步原语,用于控制对共享资源的访问,尤其是在多线程环境中。它提供了一种机制,使得一个线程可以锁定一个对象,从而确保同一时间只有一个线程可以执行特定的代码块。
Monitor 主要提供以下功能:
1. 锁定(Enter 或 TryEnter 方法):用于获取对指定对象的独占访问权。如果当前没有其他线程锁定该对象,调用线程将获得锁,并继续执行。如果有其他线程已经锁定了对象,则调用线程将被阻塞,直到获得锁为止。
2. 尝试锁定(TryEnter 方法):与 Enter 方法类似,但它允许指定超时时间。如果在指定的时间内无法获取锁,线程将不会被阻塞,而是继续执行其他任务。
3. 解锁(Exit 方法):用于释放当前线程对对象的锁定。如果一个线程试图解锁一个它没有锁定的对象,将会抛出一个异常。
4. 等待和通知(Wait 和 Pulse/PulseAll 方法):允许线程在等待某个条件成立时主动释放锁,并进入等待状态。当其他线程通过 Pulse 或 PulseAll 方法通知条件已满足时,等待线程可以被唤醒并重新尝试获取锁。
Monitor 是通过 System.Threading 命名空间下的 Monitor 类提供的,使用它的典型模式是配合 lock 语句使用。lock 语句确保了一次只有一个线程可以进入受保护的代码区域。
使用示例:
```csharp
public class SharedResource
{
private object _lockObject = new object();
public void AccessResource()
{
lock (_lockObject)
{
// 在这里访问或修改共享资源
}
}
}
```