-1
我有以下情形:线程卡在锁中
线程池中有3个线程,每个线程池应该从9个操作列表中随机选取一个。有九个操作之间有两个不能同时进行,所以我使用这些2种方法(操作)象下面的锁定:
private Object lockThis6 = new Object();
private Object lockThis7 = new Object();
public void OpSix(uSupervisor supervisor)
{
lock (lockThis6)
{
try
{
//Intructions
//Event Handler
OnOpFinished(supervisor);
}
catch
{
}
}
}
public void OpSeven(uSupervisor supervisor)
{
lock (lockThis7)
{
try
{
//Intructions
//Event Handler
OnOpFinished(supervisor);
}
catch
{
}
}
}
//EventHandler
protected virtual void OnOpFinished(uSupervisor supervisor)
{
if (OpFinished != null)
OpFinished(this, new EventLoad(supervisor));
}
在指令结束时,一个事件被提升为“通知”线程随机选择一个操作。 有趣的是,有时线程会卡在锁定语句中,我试图找出它是否是死锁情况,但情况并非如此
这些是你唯一的锁吗? – Domysee
你可以准备[mcve](http://stackoverflow.com/help/mcve)吗?目前的代码太短而不正确。此外,在准备mcve时,你可能会自己找到问题的原因。 – Sinatr
你在锁定语句中使用await吗? http://stackoverflow.com/questions/7612602/why-cant-i-use-the-await-operator-within-the-body-of-a-lock-statement – rmn36