2

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

4

4 回答 4

2

好吧,由于停机问题,您不能总是首先检测到死锁。

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

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

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

于 2012-04-14T22:13:23.300 回答
0

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

于 2012-04-16T19:48:01.450 回答
0

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

您可以杀死所有死锁的任务。这将释放在没有外部干预的情况下永远不会使用的资源。但是,您的任务现在已经死了——如果您重新启动它们,它们没有理由不能再次死锁。

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

于 2012-04-17T20:33:29.070 回答
0

暂时防止资源陷入死锁的进程。将进程退回到某个检查点,允许抢占所需资源并稍后在检查点重新启动进程。连续杀死进程,直到系统没有死锁。

于 2013-12-04T07:48:28.640 回答