【发布时间】:2011-02-09 15:36:20
【问题描述】:
当一个线程被阻塞时,这个线程是否有必要阻塞同一进程或其进程中的任何其他线程?这种情况每次都会发生吗?
【问题讨论】:
标签: multithreading process operating-system dependencies block
当一个线程被阻塞时,这个线程是否有必要阻塞同一进程或其进程中的任何其他线程?这种情况每次都会发生吗?
【问题讨论】:
标签: multithreading process operating-system dependencies block
当然。如果不是这样,我们就不必处理僵局。场景是被阻塞的线程获取了另一个线程也尝试获取的同步对象。它会阻塞。
好的,我现在明白了。一般来说,是的。需要运行其他一些代码来释放阻塞条件。不明显的情况是内核线程在驱动程序中运行代码,如果线程在 I/O 上被阻塞。或者线程调度程序,以防线程因为等待获取处理器或等待非无限超时而被阻塞。
【讨论】:
是的,任何同步操作都可能发生这种情况,其中一个线程需要等待另一个线程执行某些操作。例如,如果线程 A 持有一个锁,然后在内核中进行了长时间的阻塞操作,那么另一个线程 B 如果尝试获取锁,它将阻塞。线程 B 至少会被阻塞,直到线程 A 的阻塞操作完成。
在极端情况下,线程相互等待会导致Deadlock
补充说明:
进程中的线程彼此独立运行。一个线程阻塞不一定会阻塞其他线程。这是首先使用线程的主要原因之一。
【讨论】:
当一个线程被阻塞时,它也会阻塞进程中的所有线程
【讨论】: