关于Bakery算法的一些常见问题

时间:2017-02-28 16:37:49

标签: algorithm atomic critical-section mutual-exclusion

我最近在学习中遇到了面包店算法,只需澄清一些事情。

  1. 如果流程没有选择大于所有现有门票的票号,面包店算法是否可能违反互斥?

  2. 在没有争用成功的关键部分成功后,是否将数字[i]设置为零?

  3. 这是烘焙算法未在实践中使用的原因之一,因为找到数组最大值的过程是非原子的?我认为情况并非如此,因为这不是正确的理由。

1 个答案:

答案 0 :(得分:0)

如果流程选择的票证编号不大于所有现有票证的编号,那么面包店算法是否有可能违反互斥?

它不会违反mut。例如只要两个或多个不同的进程没有相同的编号。但这会违反公平性,因为稍后进入关键部分的过程将优先于等待更多时间的其他过程进入该过程。因此,这并不重要,但也不理想。

在没有争用的情况下,将关键部分后面的数字[i]设置为零对成功是否重要?

我认为这并不重要。重置旨在表明进程不再希望进入关键部分。不重置其价值可能会使其他人认为流程希望进入关键部分,这可能不好,但我认为它与性能问题无关。

并且因为发现数组最大值的过程是非原子的,所以在实践中不使用面包店算法的原因之一吗?我认为情况并非如此,因为那不是正确的原因。

我以为是肯定的,直到我读到“,因为那不是正确的原因。” 如果您能在第三点上分享更多的知识,我会很感激!