找到当前拥有锁的线程,以便我可以杀死它

时间:2013-06-16 22:18:44

标签: c# .net multithreading locking clr

我需要找出当前拥有锁的线程。

我正在使用托管独立应用程序实例的ThreadPool编写多线程服务器。关闭应用程序实例时,我调用Monitor.TryEnter来获取锁定或超时。如果发生超时,我需要获取哪个线程拥有锁,以便我可以中止它。

如果应用程序中没有错误,我将永远不需要这样做,因为每个工作人员都会在进入和退出应用程序时锁定和解锁应用程序实例。但是,如果有一个错误,无论出于何种原因,工作人员不会退出并且陷入僵局或陷入无限循环,我希望能够杀死该线程和应用程序实例,同时让我的服务器的其余部分继续运行。此时的应用程序实例是一个失败的原因。

看起来像一个非常直接的要求,但找不到任何内置的东西。

一种解决方法是在与锁相同的上下文中添加一个Thread成员,并让每个线程在获取锁时更新它。但这依赖于每个人总是记得在获得锁定时更新它。

1 个答案:

答案 0 :(得分:0)

您认为线程控制是自上而下的层次结构,但这不是多线程应用程序的正确思考方式。如果一个线程在执行期间出现超时或其他错误,则线程本身必须负责释放锁定并自行结束。