线程卡在锁

时间:2015-09-29 12:45:55

标签: c# multithreading

我有以下情况:

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));
    }

在教学结束时,会将事件提升至"通知"随机选择一个操作的线程。 奇怪的是,有时线程会被锁定在锁定语句中,我试图弄清楚它是否是一个死锁的情况,但事实并非如此

1 个答案:

答案 0 :(得分:-1)

我的代码中的问题出在事件处理程序中。由于事件处理程序在Lock语句中被调用,因此锁定将始终锁定用于选择该操作的任何其他线程。

只需将事件处理程序移动到Lock Statement之外解决我的问题。