接到一个异常纠结的项目啊....死锁 锁的我纠结了首先是个winform项目 ,所以为了避免界面卡死.必须做成多线程的,下面描述问题..纠结了烦请诸位有时间解答一下 ,窗体发起多个请求到 类A..类A中有多个方法.每个方法都会调用资源B.所以仅能同时执行一个方法..
但某些个方法需要长时间等待回馈 或者无限长.必须等到回馈所以目前的问题就是 
1.如何确保在这种场景下 资源B 仅能被独占,.
2.同时 当资源B被独占时,窗体在某些条件下,需要 中断正在执行的某个方法 释放资源B ,重新执行新指令.另外 如果执行以下语句
Thread thOther =null;
thOther = new Thread(new ParameterizedThreadStart(GetExplainStr));
            thOther.IsBackground = true;
            thOther.Start(wb);thOther = new Thread(GetOrderInfoThread);
            thOther.IsBackground = true;
            thOther.Start(wb);
这样是开了两个线程么? 
如果执行以下语句 是否就能释放掉以上进程所占用的资源..  thOther.Abort();
thOther = null;
多线程线程死锁锁定解锁

解决方案 »

  1.   

    1.在wb方法中lock一下就可以使资源B被独占。
    2.要释放时检测可能占用资源B的线程 abort()它.
      

  2.   

    类A中定义使用静态全局变量
    static object LockObj=new object();
    然后在把每个使用资源b的代码用lock
    lock(LockObj)
    {
        //。。
    }theother.Abort()仅能中止线程
    如果你的theother有打开了其他资源,例如com组件等,还是要手动释放的,
    建议写Dispose方法,统一using