首页 > 试题广场 >

解决互斥的另一种软件方法是 Lamport 的面包店(...

[问答题]
解决互斥的另一种软件方法是 Lamport 的面包店(bakery)算法[AMD74]。之所以起这个名字,是
因为其思想来自于面包店或其他商店,每名顾客在到达时都得到一个票号,并按票号依次得到服务。
算法如如下:
boolean choosing[n];
int number[n];
while(true){
    choosing[1] = true;
    number[i] = 1+ getmax( number[ ], n);
    choosing[i] = false;
    for( int j = 0; j < n; j++){
        while ( choosing[j] ) { };
        while ( ( number[j] != 0) &&(number[i], j) < ( number[i], i)) { };
    }
    /* 临界区 */;
    number[i] = 0;
    /* 其余部分 */;
}
数组 choosing 和 number 分别初始化为 false 和 0 。每个数组的第 i 个元素可由进程 i 读或写,
但其他进程只能读。表达式(a, b) < ( c, d)定义为
( a < c )或( a = c 且 b < d )
a.用文字描述这个算法。
b.说明这个算法避免了死锁。
c.说明它实施了互斥。

这道题你会答吗?花几分钟告诉大家答案吧!