我有以下情况:
3个线程的线程池,每个线程池应该从9个操作的列表中随机选择。在这九个操作之间有两个不能同时执行,所以我在这两个方法(操作)中使用锁定如下:
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));
}
在教学结束时,会将事件提升至"通知"随机选择一个操作的线程。 奇怪的是,有时线程会被锁定在锁定语句中,我试图弄清楚它是否是一个死锁的情况,但事实并非如此
答案 0 :(得分:-1)
我的代码中的问题出在事件处理程序中。由于事件处理程序在Lock语句中被调用,因此锁定将始终锁定用于选择该操作的任何其他线程。
只需将事件处理程序移动到Lock Statement之外解决我的问题。