【发布时间】:2016-03-31 20:07:15
【问题描述】:
我在 StackOverflow 上看到了很多关于如何创建死锁的答案,但都是编写的代码。 我希望以更简单的方式理解。我想知道您将采取哪些步骤来重新创建此死锁。我不是在寻找代码,而是在寻找更多步骤。 Traffic Deadlock
感谢您的宝贵时间。 抱歉链接图片,我需要 10 声望才能发布图片。
【问题讨论】:
标签: algorithm memory operating-system traffic
我在 StackOverflow 上看到了很多关于如何创建死锁的答案,但都是编写的代码。 我希望以更简单的方式理解。我想知道您将采取哪些步骤来重新创建此死锁。我不是在寻找代码,而是在寻找更多步骤。 Traffic Deadlock
感谢您的宝贵时间。 抱歉链接图片,我需要 10 声望才能发布图片。
【问题讨论】:
标签: algorithm memory operating-system traffic
最简单的方法 - 进程 A 必须等待 进程 B 先完成,以便 A 完成它的工作(让我们假设 A 需要 B 的输出来进行自己的一些计算),同样的事情发生在 B 中:它必须等待输出进程 A 以完成自身。
我希望这对你来说已经足够清楚了。由于您明确要求不提供代码,因此我不会编写任何代码,因为找到死锁代码可能太容易了。但基本上,它与汽车相互阻挡的图片中的相似。
【讨论】:
死锁中的“锁”来自于锁定文件或数据库表的能力,以防止多个进程同时更新同一个文件/表。
例如,进程 1 锁定表 A,进程 2 锁定表 B。如果进程 1 也想更新表 B,但发现它被锁定,则它必须等待进程 2 释放它。如果进程 2 必须更新表 A,它也会被锁定。
这种情况是一个死锁,两个进程都在等待对方释放它们的锁。
【讨论】:
我们都有一块牛排要吃,但我们的银器不足。
我有叉子可以吃,但你只有一把刀,所以我得等你吃完才能切肉。
你有一把刀可以用来切它,但我只有唯一的叉子,所以你必须等到我完成后才能抓住叉子按住它。
看来我们要挨饿了。这是一个僵局。
标准的解决方案是确保如果有人同时需要一把刀和一把叉子,那么他们必须先拿起叉子。
【讨论】: