【问题标题】:Find out if another .Net thread is blocked?查明是否有另一个 .Net 线程被阻塞?
【发布时间】:2012-01-27 16:51:34
【问题描述】:

当启动另一个 .Net 线程时,是否可以检查它当前是否被阻塞(例如发生同步 I/O)?我不想使用超时等,我只想(从原始/调度线程)知道它(目标/调度线程)是在其工作中进行还是当前处于暂停状态。

这可能吗?

【问题讨论】:

标签: .net multithreading concurrency threadpool


【解决方案1】:

您的问题是基于错误的区分。如果线程正在执行同步 I/O,那么它正在其工作中进行。假设它不包含某种错误,那么线程只会在同步 I/O 上阻塞,如果这是该线程在其正在执行的工作中进行的方式。所以无论线程是否被阻塞,它都在进行它正在做的工作。 (如果线程有问题,无论它是否被阻塞,它都可能不会在它正在做的工作中取得进展。)

你没有解释你的外部问题——你为什么认为你需要这些信息以及你打算用它做什么。但无论您的实际问题是什么,都可能有解决方案,而且它可能与询问另一个线程的状态无关。

原则上,一个线程不应该关心另一个线程在做什么,因为这会违反分层。从特定线程的角度来看,该线程未完成的任何事情都由进程完成,并且没有理由一个线程应该确切地关心进程如何选择完成其他工作,无论是由某个特定的其他线程完成,还是一组线程,另一个进程,或其他任何东西。线程应该关心他们正在做的工作以及其他事物所做的工作,而不是其他事物如何完成其​​他工作的细节。

【讨论】:

  • 大卫,感谢您的澄清。我的外部问题实际上是与 I/O 不同的用例。我将关闭这个并发布一个带有实际用例的正确 Q,但我认为编辑/更新这个会“断开”问题的现有答案。
【解决方案2】:

您可以检查工作线程的Thread.ThreadState 属性。它不会给你太多细节,但总比没有好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    相关资源
    最近更新 更多