【问题标题】:when a thread is blocked.can cause the blocking of another thread in the same process or the whole process?当一个线程被阻塞时,是否会导致同一进程或整个进程中的另一个线程阻塞?
【发布时间】:2011-02-09 15:36:20
【问题描述】:

当一个线程被阻塞时,这个线程是否有必要阻塞同一进程或其进程中的任何其他线程?这种情况每次都会发生吗?

【问题讨论】:

    标签: multithreading process operating-system dependencies block


    【解决方案1】:

    当然。如果不是这样,我们就不必处​​理僵局。场景是被阻塞的线程获取了另一个线程也尝试获取的同步对象。它会阻塞。

    好的,我现在明白了。一般来说,是的。需要运行其他一些代码来释放阻塞条件。不明显的情况是内核线程在驱动程序中运行代码,如果线程在 I/O 上被阻塞。或者线程调度程序,以防线程因为等待获取处理器或等待非无限超时而被阻塞。

    【讨论】:

    • 请原谅我的错误表达..我不是说这种情况是否发生或是否有可能。我想问:当一个线程被阻塞时,这个线程是否有必要阻塞该线程中的任何其他线程相同的过程还是它的过程?这是每次都发生吗?
    • @user:您能否编辑您的问题以包含此说明?
    【解决方案2】:

    是的,任何同步操作都可能发生这种情况,其中一个线程需要等待另一个线程执行某些操作。例如,如果线程 A 持有一个锁,然后在内核中进行了长时间的阻塞操作,那么另一个线程 B 如果尝试获取锁,它将阻塞。线程 B 至少会被阻塞,直到线程 A 的阻塞操作完成。

    在极端情况下,线程相互等待会导致Deadlock

    补充说明

    进程中的线程彼此独立运行。一个线程阻塞不一定会阻塞其他线程。这是首先使用线程的主要原因之一。

    【讨论】:

      【解决方案3】:

      当一个线程被阻塞时,它也会阻塞进程中的所有线程

      【讨论】:

      • 不,这根本不是真的。在已经发布的答案中描述的情况下会发生死锁;它不会像你说的那样自动发生根本
      猜你喜欢
      • 2015-04-27
      • 2017-10-03
      • 2013-04-21
      • 1970-01-01
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多