C# “同步原语”;“锁定一次”;
我需要一个同步原语,它类似于监视器,但不需要像我输入它那样多次退出它。如果我通过一个线程进入Monitor,然后通过同一个线程重新进入它,我将需要调用Monitor.Exit两次。但我需要一个电话退出C# “同步原语”;“锁定一次”;,c#,.net,parallel-processing,C#,.net,Parallel Processing,我需要一个同步原语,它类似于监视器,但不需要像我输入它那样多次退出它。如果我通过一个线程进入Monitor,然后通过同一个线程重新进入它,我将需要调用Monitor.Exit两次。但我需要一个电话退出 现在我使用了一种监视器包装器,如果当前线程已经输入了它,它就不会进入监视器(这就是为什么我可以通过一次调用退出它)。但是.NET Framework可能包含一个吗?我很想知道为什么您会调用监视器。在调用监视器的次数相同的情况下多次输入。退出。通常,任何此类同步代码如下所示: try { M
现在我使用了一种监视器包装器,如果当前线程已经输入了它,它就不会进入监视器(这就是为什么我可以通过一次调用退出它)。但是.NET Framework可能包含一个吗?我很想知道为什么您会调用
监视器。在调用监视器的次数相同的情况下多次输入。退出。通常,任何此类同步代码如下所示:
try
{
Monitor.Enter(lockObject);
// some code that needs to be synchronized
}
finally
{
Monitor.Exit(lockObject);
}
假设您正在使用尝试
/最后
无论您在哪里使用监视器获得锁。输入
(您应该是),我很难理解为什么您需要这个“锁一次”类
事实上,您基本上不必自己做这件事,因为做基本相同事情的更简单方法是使用lock
语句:
lock (lockObject)
{
// some code that needs to be synchronized
}
也就是说,我肯定是遗漏了什么。我很好奇你为什么会调用监视器。在没有相同次数调用监视器的情况下多次输入。退出。通常,任何此类同步代码如下所示:
try
{
Monitor.Enter(lockObject);
// some code that needs to be synchronized
}
finally
{
Monitor.Exit(lockObject);
}
假设您正在使用尝试
/最后
无论您在哪里使用监视器获得锁。输入
(您应该是),我很难理解为什么您需要这个“锁一次”类
事实上,您基本上不必自己做这件事,因为做基本相同事情的更简单方法是使用lock
语句:
lock (lockObject)
{
// some code that needs to be synchronized
}
也就是说,我肯定会遗漏一些东西。您如何知道它是同一个线程,以及如何确保当这个线程离开时,它将在离开前调用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()
{
}
您如何知道它是同一个线程,以及如何确保当这个线程离开时,它将在离开之前调用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()
{
}
不是答案,但是:可重入锁不是一个好主意。。。例如,Microsoft允许您将ReaderWriterLockSlim(ReaderWriterLockSlim)配置为递归输入,但他们也认为这不是一个好主意。不是答案,但是:可重入锁不是一个好主意。。。例如,Microsoft允许您将ReaderWriterLockSlim(ReaderWriterLockSlim)配置为递归输入,但他们也认为这不是一个好主意。这可能是递归函数的情况,当您只需要锁定第一个条目时,也可能是递归函数的情况,当您只需要锁定第一个条目时。