这三个现象的共同点是,它们都是进程发生了某种异常的状况而无法继续往下推进的现象(故意设计的死循环除外),在考研选择题中可能会考察,所以要注意区分。
死锁
死锁是在并发执行中,多个进程因竞争资源而造成的一种僵局,各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象。
例如,在哲学家进餐问题中,当所有哲学家同时拿起了自己左边的筷子,这时就陷入了死锁,每个哲学家都在等待自己右边的人放下筷子,导致所有人都不能进餐。
死锁一定是“循环等待对方手里的资源”导致的,因此如果有死锁现象,那至少有两个或两个以上的进程同时发生死锁。另外,发生死锁的进程一定处于阻塞态。
饥饿
由于长期得不到想要的资源,某进程无法向前推进的现象。与死锁要区分开,死锁是永远阻塞无法向前推进,而饥饿是等待了很长时间而无法向前推进。
例如,在短进程优先算法SPF中,若有源源不断地短进程到来,则长进程将一直得不到处理机,从而发生长进程饥饿。
可能只有一个进程发生饥饿,发生饥饿的进程既可能是阻塞态(如长期得不到需要的I/O设备)也有可能是就绪态(如长期得不到处理机)。
死循环
死循环是某进程执行过程中一直跳不出某个循环的现象,有时是因为程序逻辑bug导致的,有时是程序员故意设计的。
可能只有一个进程发生死循环,死循环的进程可以上处理机运行(可以是运行态),只不过无法像期待的那样顺利推进。
死锁和饥饿问题是由于操作系统分配资源的策略不合理导致的,而死循环是由代码逻辑的错误导致的。
死锁和饥饿是管理者(操作系统)的问题,死循环是被管理者的问题。
文章阐述了并发执行中进程可能遇到的三种异常状况:死锁、饥饿和死循环。死锁是多个进程因循环等待资源导致的僵局;饥饿是指进程长时间无法获取所需资源;死循环则是程序逻辑问题,导致进程无法正常结束循环。这些状态分别与资源分配策略和代码质量有关,影响进程的执行和系统的稳定性。
1414

被折叠的 条评论
为什么被折叠?



