0

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

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

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

似乎是一个非常直接的要求,但找不到任何内置的东西来做到这一点。

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

4

1 回答 1

0

您认为线程控制是自上而下的层次结构,但这不是多线程应用程序问题的正确思维方式。如果线程在执行过程中出现超时或其他问题,线程本身必须负责释放锁并自行结束。

于 2013-06-16T22:27:06.617 回答