BAKERY'S ALGORITHM所用到的数据结构有:
choosing[0..n]=flase;
number[0..n]=0;
----------------------------------------------
choosing =true;/*进程Pi 开始选号码*/
number =max{number[0],number[1],..number[n-1]}+1;
/*进程Pi号码为当前最大号码值加1*/
choosing = false;
for (j = 0; j < N; j++) {
while (choosing[j]);/*如果进程Pj请求进入临界区但没选好号码,则Pi在此循环等待*/
while (number[j] &&
((number[j] < number) ||((number[j] == number) && j < i)));
}
/*如果Pj 在其临界区中,则Pi忙等待。如果进程Pi具有当前最小号码或者是具有相同最小号码的较小下指标的进程,则可以执行完第2个while循环而进入它的临界区;其他进程要么在第一个while处忙等待,要么在第二个while处忙等待*/
-------------
CRITICAL SECTION
--------------------------------------
number[i] = 0;/*Pi退处它的临界区时置号码为0,从而允许其他的进程进入临界区*/
---------------------
可以证明,该算法符合临界区问题解决方法的三个必要条件:
互斥条件(mutual exclusive),进展条件(progress)和有限等待条件(bounded waiting)
choosing[0..n]=flase;
number[0..n]=0;
----------------------------------------------
choosing =true;/*进程Pi 开始选号码*/
number =max{number[0],number[1],..number[n-1]}+1;
/*进程Pi号码为当前最大号码值加1*/
choosing = false;
for (j = 0; j < N; j++) {
while (choosing[j]);/*如果进程Pj请求进入临界区但没选好号码,则Pi在此循环等待*/
while (number[j] &&
((number[j] < number) ||((number[j] == number) && j < i)));
}
/*如果Pj 在其临界区中,则Pi忙等待。如果进程Pi具有当前最小号码或者是具有相同最小号码的较小下指标的进程,则可以执行完第2个while循环而进入它的临界区;其他进程要么在第一个while处忙等待,要么在第二个while处忙等待*/
-------------
CRITICAL SECTION
--------------------------------------
number[i] = 0;/*Pi退处它的临界区时置号码为0,从而允许其他的进程进入临界区*/
---------------------
可以证明,该算法符合临界区问题解决方法的三个必要条件:
互斥条件(mutual exclusive),进展条件(progress)和有限等待条件(bounded waiting)
本文详细介绍了Bakery算法的数据结构及其实现过程,通过进程间的协调机制来解决临界区问题,确保了进程调度的互斥性、进展性和有限等待性。

680

被折叠的 条评论
为什么被折叠?



