【发布时间】:2012-04-26 19:37:35
【问题描述】:
我在理解如何处理死锁时遇到了一些麻烦。首先,可以采取哪些行动?此外,通常采取什么行动,哪个是“最好的”?谢谢。
【问题讨论】:
标签: programming-languages operating-system system deadlock
我在理解如何处理死锁时遇到了一些麻烦。首先,可以采取哪些行动?此外,通常采取什么行动,哪个是“最好的”?谢谢。
【问题讨论】:
标签: programming-languages operating-system system deadlock
嗯,由于停机问题,您不能总是首先检测到死锁。
但假设您有合理的怀疑已经发生,那么您没有太多选择。你可以:
中断(即发送信号/异常到)所有持有锁的线程。不过,他们必须能够处理由此产生的中断。
杀死所有涉及的线程/进程。这是一个极端的操作,它以牺牲某些数据可能会被程序丢失的风险为代价来节省系统的其余部分。
【讨论】:
您在问如何处理死锁。 这不是正确的问题:您应该避免使用它们。确保它们不会发生,因为实际上您的程序无法从它们中恢复。
【讨论】:
你可以杀死一些死锁的任务,并希望其他的可以继续进行,并且不会继续或立即陷入死锁。这不是特别可靠。
你可以杀死所有死锁的任务。这将释放在没有外部干预的情况下永远不会使用的资源。但是,您的任务现在已经死了 - 如果您重新启动它们,它们没有理由不能再次死锁。
正如@usr 所说,正确的做法是首先避免死锁。任何潜在的死锁都表明您的系统存在严重缺陷,可能会导致您重新考虑您的设计。
【讨论】:
暂时防止资源陷入死锁进程。 将进程退回到某个检查点,允许抢占所需资源并稍后在检查点重新启动进程。 连续杀死进程,直到系统没有死锁。
【讨论】: