每个进程都需要一些资源来完成其执行。但是, 资源是按顺序授予的。
- 该线程需要一些资源。
- 如果资源可用, 则OS会授予该资源, 否则让进程等待。
- 该线程使用它并在完成时释放。
死锁是指每个计算机进程都在等待分配给另一个进程的资源的情况。在这种情况下, 由于所需的资源由其他正在等待释放其他资源的进程所保留, 因此没有任何进程被执行。
让我们假设存在三个线程P1, P2和P3。存在三个不同的资源R1, R2和R3。 R1分配给P1, R2分配给P2, R3分配给P3。
一段时间后, P1要求R2正在使用R1。 P1暂停执行, 因为没有R2就无法完成。 P2还要求P3正在使用R3。 P2也停止执行, 因为没有R3就无法继续执行。 P3还要求由P1使用的R1, 因此P3也停止执行。
在这种情况下, 三个线程之间将形成一个循环。没有任何进展, 他们都在等待。由于所有进程都被阻止, 因此计算机无响应。
饥饿和僵局之间的区别
Sr. | Deadlock | Starvation |
---|---|---|
1 | 死锁是没有进程被阻塞并且没有进程继续的情况 | 饥饿是低优先级进程被阻塞而高优先级进程继续进行的情况。 |
2 | 死锁是无限的等待。 | 饥饿是漫长的等待, 但不是无限的。 |
3 | 每个死锁总是饥饿。 | 每个饥饿都不必陷入僵局。 |
4 | 所请求的资源被其他进程阻止。 | 所请求的资源被更高优先级的进程连续使用。 |
5 | 当相互排斥, 保持和等待时, 不会同时发生抢占和循环等待, 就会发生死锁。 | 它是由于不受控制的优先级和资源管理而发生的。 |
死锁的必要条件
互斥
资源只能以互斥的方式共享。这意味着, 如果两个进程不能同时使用同一资源。
保持并等待
进程在等待某些资源的同时保留另一资源。
无抢占
计划好的线程将一直执行到完成为止。调度程序无法同时调度其他进程。
循环等待
所有进程都必须以循环方式等待资源, 以便最后一个进程正在等待第一个进程所持有的资源。
评论前必须登录!
注册