是否可以检测同一线程是否试图释放锁?我们在代码中有很多地方看起来像:
try
{
try
{
if(!Monitor.TryEnter(obj, 2000))
{
throw new Exception("can not lock");
}
}
finally
{
Monitor.Exit(obj);
}
}
catch
{
//Log
}
上面的代码非常简化,实际上Enter和Exit语句位于自定义对象(锁管理器)中。
问题是,在那个结构中,我们SynchronizationLockException
在尝试“退出”时遇到了问题,因为它看起来像没有成功锁定的线程,最终试图释放。
所以问题是,我如何知道制作 Monitor.Exit 的线程是否与制作 Monitor.Enter 的线程相同?
我认为我可以使用 CurrentThread.Id 来同步进入和退出,但我不确定它是否足够“安全”。