因为其思想来自于面包店或其他商店,每名顾客在到达时都得到一个票号,并按票号依次得到服务。
算法如如下:
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.说明它实施了互斥。