死锁与活锁,死锁与饥饿的区别

死锁是指多个线程相互等待对方释放资源,导致它们都无法继续执行下去。这是一种静止状态,这种情况会导致所有线程都被永久性地阻塞,没有一个线程能够继续执行。就像交通堵塞一样,没有车辆能够前进。
活锁是指多个线程不断地改变自己的状态以回应对方,但最终无法取得进展,导致线程不断重试相同的操作,却无法成功。这是一种运行时状态,线程在持续地执行,但任务不会向前推进。活锁通常发生在线程在避免冲突时不断改变状态,但却没有成功,就像两个人在狭窄的道路上不断让对方走,却无法通过一样。
饥饿是指一个或多个线程或进程由于某种原因无法获得所需的资源或执行机会,因此无法适时地执行。这是一种动态问题,通常由资源分配不合理或线程优先级设置不当等原因导致。在饥饿中,线程不一定被永久性地阻塞,但是它们可能长时间无法获得所需的资源。就像一个人在繁忙的自助餐厅排队等待很长时间,但一直无法获得食物一样。