僵局与饥饿
死锁和饥饿的主要区别在于它们之间的因果关系,死锁是导致饥饿的原因。死锁和饥饿的另一个有趣的区别是死锁是一个问题,而饥饿有时可以帮助摆脱死锁。当另一个程序在计算机中同时运行时,另一个程序将需要一个以上的线程来完成。因此,为了有一个公平的系统,程序员必须确保所有进程/线程都能接收或获得足够的资源访问权。如果不这样做,就会陷入僵局,并导致后来的饥荒。一般来说,一个公平的系统不包含任何死锁或饥饿。死锁和饥饿主要发生在许多线程竞争有限的资源时。
什么是死锁(deadlock)?
死锁是两个线程或进程等待对方完成任务时发生的一种情况。他们只会挂断电话,永远不会停止或完成任务。在计算机科学中,死锁随处可见。在事务数据库中,当两个进程在各自的事务中更新相同的两行信息,但顺序相反时,将导致死锁。在并发编程中,当两个相互竞争的动作等待对方继续前进时,可能会出现死锁。在电信系统中,由于信号丢失或损坏,可能会发生死锁。
死锁是目前多处理系统和并行计算中的主要问题之一。作为一种解决方案,在软件和硬件上都实现了一种称为进程同步的锁定系统。
什么是饥饿(starvation)?
根据医学词典,饥饿是由于严重缺乏或完全缺乏维持生命所需的营养。类似地,在计算机科学中,当多个线程或进程等待同一个资源时会遇到饥饿问题,这称为死锁。
为了摆脱死锁,其中一个进程或线程必须放弃或回滚,以便另一个线程或进程可以使用该资源。如果这种情况持续发生,并且同一进程或线程每次都必须放弃或回滚,而让其他进程或线程使用资源,则所选的回滚的进程或线程将经历一种称为饥饿的情况。因此,为了摆脱僵局,饥饿是解决办法之一。因此,有时饥饿被称为一种生命锁。当有许多高优先级进程或线程时,低优先级的进程或线程总是在死锁中死机。
可能有许多不足,例如资源不足和CPU不足。关于饥饿有许多常见的例子。它们分别是读者问题、作家问题和哲学家吃饭问题,这两个问题更为著名。有五个沉默的哲学家坐在圆桌旁,端着一碗意大利面。叉子放在两个相邻的哲学家之间。每个哲学家必须交替思考和进食。然而,一个哲学家只有当他有左右叉子的时候才能吃意大利面。
死锁(deadlock)和饥饿(starvation)的区别
•工艺:
•在死锁状态下,两个线程或进程将互相等待,并且都不会继续前进。
•在饥饿状态下,当两个或多个线程或进程等待同一个资源时,一个线程或进程将回滚并让其他线程先使用该资源,然后饥饿的线程或进程将重试。因此,所有线程或进程都将继续前进。
•回滚:
•在死锁中,高优先级线程/进程以及低优先级线程/进程都将无限期地等待对方。它永远不会结束。
•但是,在饥饿的情况下,低优先级的将等待或回滚,而高优先级的将继续。
•等待或锁定:
•死锁是循环等待。
•饥饿是一种活锁,有时有助于摆脱僵局。
•僵局和饥饿:
•僵局会导致饥饿,但饥饿不会导致僵局。
•原因:
•由于互斥、保持等待、无抢占或循环等待,将发生死锁。
•由于资源匮乏、资源管理不受控制以及流程优先顺序,出现饥饿。
小结:
僵局与饥饿
死锁和饥饿是由于在编程和实现硬件期间发生的数据争用和争用条件而出现的一些问题。在死锁中,两个线程将无限地等待对方而不执行,而在饥饿状态下,一个线程将回滚并让另一个线程使用资源。死锁将导致饥饿,而饥饿将帮助线程从死锁中脱离。
- Computer by CC BY 2.0)
- The “Dining Philosophers” by Bdesham (CC BY-SA 3.0)