监视器进入/释放对象时通知

本文关键字:对象 通知 释放 监视器 | 更新日期: 2023-09-27 18:07:25

我觉得我可能在这里重新发明轮子。以下是我想要达到的目标:

当使用lockMonitor.Enter锁定对象时,我希望收到通知。同样,当对象被释放时,我希望有一个通知。

我正在考虑写一个包装器类,暴露一个可观察对象来发送通知,和几个方法来获取/释放锁。但是,就像我提到的,我觉得我可能在重做一些已经存在的东西。有什么。net技术可以让我在不编写新类的情况下实现这个目标吗?

编辑:回答一些问题:为什么?我需要知道什么时候一段代码是繁忙的,甚至在尝试执行之前。假设我们在UI上有两个按钮,A和B。A执行methodA, B执行methodB。它们都使用相同的对象来锁定/同步。我想禁用这些按钮,当我看到有人已经执行一段代码是由同步对象实例_syncObject锁定。我想给用户一个提示,这个函数现在不能执行。

监视器。TryEnter或尝试验证锁是否可用不是解决方案,因为它需要轮询,而不是通知。

void methodA()
{
lock(_syncObject)
{
...
}
}
void methodB()
{
{
lock(_syncObject)
{
...
}
}

监视器进入/释放对象时通知

不清楚你想做什么。如果你想要某个线程正在执行受保护的代码段的通知,您可以创建一组事件,这样只要代码段开始,您就可以触发代码正在执行的事件……

您将获得的唯一"通知"是Monitor被锁定或它已被解锁。例如:

   bool lockTaken;
   Monitor.Enter(lockObject, ref lockTaken);
   if(!lockTaken) Console.WriteLine("Already locked");
   else Console.WriteLine("Not already locked.");

监视器和其他同步对象用于控制线程,而不是用于通知。如果你想通知发生的事情,创建事件并引发它们——这就是事件的作用。