繁体   English   中英

Lamport的烘焙算法

[英]Lamport's bakery algorithm

    do { 
     choosing[i] = true; 
   number[i] = max(number[0], number[1], …, number [n – 1])+1; 
     choosing[i] = false; 
     for (j = 0; j < n; j++) { 
     while (choosing[j]); // espera que j obtenha um bilhete 
     while ((number[j]!= 0) && (number[j],j)<(number[i],i))); 
     } 
     critical section 
     number[i] = 0; 
     remainder section 
    } while (1); 

我对此算法有疑问,据推测,当您的数字为零时,您将无法进入关键部分。

但是,如果循环中的条件为true,则循环的工作方式将卡在所述循环中。

意味着非零数字将不是达到临界条件的数字吗?

这对我来说有点困惑,我将感谢您的帮助

约翰·约翰

看一下原始文件:

http://research.microsoft.com/en-us/um/people/lamport/pubs/bakery.pdf

(来源: http : //research.microsoft.com/en-us/um/people/lamport/pubs/pubs.html#bakery

断言2表示任何时候最多一个处理器可以处于其关键部分。 断言1和2证明处理器以先到先得的方式进入其关键部分。 因此,除非整个系统死锁,否则无法阻止单个处理器。 断言3暗示,系统只能通过处理器在其关键部分停止运行或无限制的处理器故障和重新进入序列而死锁。

到达临界区时,您的数字(即number[i]不可能为零,因为您是唯一写入该数字的人,并且您是在到达循环之前将其设置的, while ((number[j]!= 0) && (number[j],j)<(number[i],i))); 部分。

按照定义,您也不可能陷入此等待循环(L2),因为问题是假定线程不会在关键部分崩溃。 因此,一旦您等待的所有其他线程退出关键部分并将其number[j]设置为零,就该进入关键部分了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM