我需要一个类似于Monitor的同步原语,但不需要像我输入它那样多次退出它。如果我通过一个线程进入Monitor,然后通过同一个线程重新输入它,我将需要两次调用Monitor.Exit。但我需要通过一次电话退出。
现在我使用某种Monitor包装器,如果它已经被当前线程输入,则不会进入Monitor(这就是为什么我可以通过一次调用退出它)。但是.NET Framework可能包含一个吗?
答案 0 :(得分:1)
我很想知道为什么在没有同等数量的Monitor.Enter
来电的情况下多次拨打Monitor.Exit
。通常,任何此类同步代码都如下所示:
try
{
Monitor.Enter(lockObject);
// some code that needs to be synchronized
}
finally
{
Monitor.Exit(lockObject);
}
假设您使用try
/ finally
,只要您使用Monitor.Enter
( )获取锁定,我就无法理解为什么你需要这个“锁定一次”的课程。
事实上,你基本上不应该自己做这个,因为一个更简单的方法基本上做同样的事情是使用lock
语句:
lock (lockObject)
{
// some code that needs to be synchronized
}
那就是说,我当然可能会遗漏一些东西。
答案 1 :(得分:0)
你怎么知道它是同一个线程,如何确保当这个线程离开时它会在它离开之前调用exit?
从它的外观来看,你只需要具有锁定的其他东西(在外层)。也许是一个“入口点”方法,它锁定并调用另一个具有工作主要功能的方法,然后你可以多次调用另一个方法,而不必通过锁定。
public static void MethodOne()
{
lock (lockObj)
{
MethodTwo();
}
}
private static void MethodTwo()
{
//This method can be called multiple times
//without going past MethodOne and so you only
//lock once
}
private static void MethodThree()
{
}