Multithreading 当一个线程被阻塞时。是否会导致同一进程或整个进程中的另一个线程被阻塞?

Multithreading 当一个线程被阻塞时。是否会导致同一进程或整个进程中的另一个线程被阻塞?,multithreading,process,operating-system,dependencies,block,Multithreading,Process,Operating System,Dependencies,Block,当一个线程被阻塞时,该线程是否有必要阻塞同一进程或其进程中的任何其他线程?是否每次都会发生这种情况?当然。如果不是这样的话,我们就不必处理僵局。这种情况是,被阻止的线程获取了另一个线程试图获取的同步对象。它会阻塞 好了,我现在明白问题了。一般来说,是的。需要运行一些其他代码来释放阻塞条件。不明显的情况是,如果线程在I/O上被阻塞,那么内核线程在驱动程序中运行代码。或者线程调度程序,如果线程因为等待获取处理器或等待非无限超时而被阻塞。是的,任何同步操作都可能发生这种情况,其中一个线程需要等待另一个

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

当然。如果不是这样的话,我们就不必处理僵局。这种情况是,被阻止的线程获取了另一个线程试图获取的同步对象。它会阻塞


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

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

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

补充澄清


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

当线程被阻塞时,它还阻止进程中的所有线程

请原谅我的错误表达。我不是说如果发生这种情况或有可能发生这种情况。我想问:当一个线程被阻止时,该线程是否有必要阻止同一进程或其进程中的任何其他线程?是否每次都会发生这种情况?@user:您可以将问题编辑为包括这个澄清吗?不,这根本不是真的。在已经发布的答案中描述的情况下会发生死锁;它根本不像你说的那样自动发生。