检测到死锁时系统可以采取的操作是什么?

时间:2012-04-14 22:10:32

标签: programming-languages operating-system system deadlock

我在理解如何处理死锁方面遇到了一些麻烦。首先,可以采取哪些行动?另外,通常采取什么行动,哪个行动“最好”?谢谢。

4 个答案:

答案 0 :(得分:2)

嗯,由于停机问题,您无法始终检测到死锁。

但假设你有合理的怀疑已经发生,那么你没有太多选择。你可以:

  • 中断(即发送信号/异常)所有持有锁的线程。但是,他们必须能够处理产生的中断。

  • 杀死所涉及的所有线程/进程。这是一个激烈的行动,它以一些数据可能会被程序丢失的风险为代价来节省系统的其余部分。

答案 1 :(得分:0)

您正在询问如何处理死锁。 这不是正确的问题:你应该避免它们。确保它们不会发生,因为实际上,您的程序无法从它们中恢复。

答案 2 :(得分:0)

你可以杀死一些死锁的任务,并希望其他人可以继续,并且不会留在或立即陷入僵局。这不是特别可靠。

你可以杀死所有死锁的任务。这将释放资源,否则在没有外部干预的情况下永远不会使用。但是,你的任务现在已经死了 - 如果你再次启动它们,那么它们就没有理由再次陷入僵局。

正如@usr所说,正确的做法是首先避免死锁。任何潜在的死锁都表明系统存在严重缺陷,可能会让您重新考虑您的设计。

答案 3 :(得分:0)

暂时阻止资源死锁进程。 将进程退回到某个检查点,允许抢占所需资源,然后在检查点重新启动进程。 连续杀死进程,直到系统无死锁。