【发布时间】:2014-12-19 16:14:50
【问题描述】:
我有 5 个线程尝试随机进入静态类的关键部分。如果另一个线程在关键部分,我希望其他线程“退避”并稍后尝试。问题是似乎在第一个线程进入临界区后锁没有被释放,因为对于其他线程,如果我在Monitor.TryEnter(thisLock) '断点',总是会返回 false。
任何帮助,将不胜感激。谢谢。
这是我的代码:
static class Receiver
{
public static object thisLock = new object();
public static int success;
public static bool hasLocked()
{
if(Monitor.TryEnter(thisLock))
{
Monitor.Enter(thisLock);
System.Threading.Thread.Sleep(10);
success++;
Monitor.Exit(thisLock);
return true;
}
return false;
}
}
【问题讨论】:
-
您获得了两次锁
Monitor.TryEnter(thisLock),然后又获得了一次Monitor.Enter(thisLock),但只释放了一次。 -
感谢您的帮助。
标签: c# multithreading