假设我管理我的线程池,那么没有饥饿...
当我使用信号量或其他同步器时,信号量导致线程等到指定的事件发生(例如信号量释放一个令牌),那等待线程(无所事事)仍然在争夺处理器资源对抗活动线程?或者,在信号量释放令牌之前,它是否会以资源方式获取后座资源?
答案 0 :(得分:1)
等待线程进入休眠状态。它不占用任何处理器时间,即,在轮询等待条件为真时它不执行忙等待。调度程序不会考虑它。一旦它再次空闲,信号量将明确地唤醒它。
答案 1 :(得分:1)
Javadoc for Semaphore.acquire
对此非常明确:
如果没有许可证,则当前线程将被禁用 线程安排目的和处于休眠状态,直到两件事之一 发生:[...]
所以是的,等待的线程在资源方面采用后座,直到许可证可用。