接到一个异常纠结的项目啊....死锁 锁的我纠结了首先是个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.如何确保在这种场景下 资源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;
多线程线程死锁锁定解锁
2.要释放时检测可能占用资源B的线程 abort()它.
static object LockObj=new object();
然后在把每个使用资源b的代码用lock
lock(LockObj)
{
//。。
}theother.Abort()仅能中止线程
如果你的theother有打开了其他资源,例如com组件等,还是要手动释放的,
建议写Dispose方法,统一using