Professional Documents
Culture Documents
Lamport's Bakery Algorithm
Lamport's Bakery Algorithm
1 choosing[0] = true;
2 Number[0] = 1 choosing[1] = true;
3 Choosing[0] = false; Number[1] = max(1) + 1 = 2
4 LOOP 0: Choosing[0] = false; Choosing[1] = false;
5 Number[0] = 1 → 1 != 0 → TRUE && Loop 0: Choosing[0] = false;
*Number[0] = 1 < Number[0] = 1 → FALSE → break
6 Loop 1: Choosing[1] = false; Number[0] = 1 → 1 != 0 → TRUE &&
Number[0] = 1 < Number[1] = 2 → TRUE
7 Number[1] = 2 → 2 != 0 → TRUE && Number[0] = 1 → 1 != 0 → TRUE &&
Number[1] = 2 < Number[0] = 1 → FALSE → Breaks Number[0] = 1 < Number[1] = 2 → TRUE
8 doCriticalSection(); Number[0] = 1 → 1 != 0 → TRUE &&
Number[0] = 1 < Number[1] = 2 → TRUE]
9 Number[0] = 0; Number[0] = 1 → 1 != 0 → TRUE &&
Number[0] = 1 < Number[1] = 2 → TRUE
10 doRemainderSection() Number[0] = 0 → 0 != 0 → FALSE &&
Number[0] = 1 < Number[1] = 2 → TRUE
11 Loop 1: Choosing[1] = false;
12 Number[1] = 2 → 2 != 0 → TRUE &&
Number[1] = 2 < Number[1] = 2 → FALSE
13+ doCriticalSection(); …
2 Processes with Same Number Example
# Process 0 Process 1
1 choosing[0] = true; choosing[1] = true;
2 Number[0] = 1 Number[1] = 1
3 Choosing[0] = false; Choosing[1] = false;
4 Loop 0: choosing[0] = false; Loop 0: choosing[0] = false;
5 Number[0] = 1 != 0 ➔ TRUE && Number[0] = 1 != 0 ➔ TRUE &&
Number[0] = 1 < Number[0] = 1 ➔ ➔ Number[0] = 1 < Number[1] = 1 ➔
Number[0] = 1 == Number[0] == 1 && NumberID = 0 < NumberID = 0 → FALSE Number[0] = 1 == Number[1] == 1 && NumberID = 0 < NumberID = 1 → TRUE
→ BREAK
6 Loop 1: choosing[0] = false; loop