【问题标题】:Use of Banker's Algorithm银行家算法的使用
【发布时间】:2014-03-23 09:39:54
【问题描述】:

当我们有锁、完成变量和信号量时,为什么我们需要银行家算法。由于在linux中锁是按一定的顺序获取的,所以不可能有任何死锁。那么在这种情况下运行银行家算法有什么用呢。

【问题讨论】:

  • “由于在linux中锁是按一定的顺序获取的,所以不可能有死锁”。不? Linux 如何知道你的代码是否写得足够好以避免死锁?而在 Linux 内部……也没有魔法,只有人类编写的源代码

标签: linux linux-kernel operating-system bankers-algorithm


【解决方案1】:

银行家算法用于避免死锁,通过检查资源分配是否可能导致系统死锁,而用于解决临界区问题,即避免多个进程同时进入临界区。

如果不结合其他死锁解决方案,锁定本身无法避免/防止死锁。

正如deviantfan 的 评论:在大多数操作系统中对锁获取没有限制。下面是一个简单的例子,即使使用了lock,系统也可能死锁:

P1: ....;锁(文件A);锁(文件B); ....解锁(文件A);解锁(文件B); ....

P2: ....;锁(文件B);锁定(文件A);.....解锁(文件B);解锁(文件A); ....

【讨论】:

  • 由于资源在 linux 中表示为文件,我们不能将资源分配给进程视为进程正在使用临界区(该资源的文件)
  • 谁来管理文件的锁定?对...(尽管它说 Linux 中的所有内容都是一个文件,但并不是“所有内容”。并非内核中的每个变量都需要是一个文件...)
  • 文件只是共享资源的一个例子。文件锁由操作系统监控。
  • @Prashant:为什么不呢?临界区是修改共享资源的一段代码。您可以在大多数操作系统书籍的读写器问题中找到这一点。
  • @PrashantSinghRathore 请注意,区别在于仅获取一个资源(锁定)与安全获取多个资源(锁定机制可能导致死锁情况)。
猜你喜欢
  • 2018-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-15
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
  • 2021-11-07
相关资源
最近更新 更多