Verification of Dekker`s Algorithm
Transcription
Verification of Dekker`s Algorithm
CoSc 450: Programming Paradigms 04 Verification of Dekker’s Algorithm Proof of mutual exclusion p1: p2: p3: p4: p5: p6: p7: p8: p9: p10: Algorithm 4.2: Dekker’s algorithm boolean wantp ¿ false, wantq ¿ false integer turn ¿ 1 p q loop forever loop forever non-critical section q1: non-critical section wantp ¿ true q2: wantq ¿ true while wantq q3: while wantp if turn = 2 q4: if turn = 1 wantp ¿ false q5: wantq ¿ false await turn = 1 q6: await turn = 2 wantp ¿ true q7: wantq ¿ true critical section q8: critical section turn ¿ 2 q9: turn ¿ 1 wantp ¿ false q10: wantq ¿ false c M. Ben-Ari 2006 M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition ≠ Slide 4.12 p1: p2: p3: p4: p5: p6: p7: p8: p9: p10: ⇒ ⟨ q3..5 ≡ wantq⟩ Proof of mutual exclusion ¬q3..5 Algorithm 4.2: Dekker’s algorithm ⟨ ¬(p ∨ q) ¬p ∧ ¬q)⟩ boolean wantp ¿ false, wantq ¿≡ false integer ¬q3 ∧ ¬q4 ∧ turn ¬q5¿ 1 p q ⇒ ⟨ p ∧loop q⇒ p⟩ loop forever forever q4 ≡ fsection alse non-critical q1: non-critical section wantp ¿ true q2: wantq ¿ true ⇒ ⟨ p ∧ f alse ≡ f alse⟩ while wantq q3: while wantp if¬(p4 turn =∧2q4) q4: if turn = 1 wantp ¿ false await turn = 1 q3 wantp ¿ true critical section turn ¿ 2 wantp ¿¬(p4 false ∧ q4) q5: q6: q7: q8: q9: q10: wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false Lemma 4.10 turn = 1 ∨ turn = 2 c M. Ben-Ari 2006 M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition ≠ p3..5 ∨ p8..10 ≡ want p q3..5 ∨ q8..10 ≡ wantq Slide 4.12 p1: p2: p3: p4: p5: p6: p7: p8: p9: p10: ⇒ ⟨ q3..5 ≡ wantq⟩ Proof of mutual exclusion ¬q3..5 Algorithm 4.2: Dekker’s algorithm ⟨ ¬(p ∨ q) ¬p ∧ ¬q)⟩ boolean wantp ¿ false, wantq ¿≡ false integer ¬q3 ∧ ¬q4 ∧ turn ¬q5¿ 1 p q ⇒ ⟨ p ∧loop q⇒ p⟩ loop forever forever q4 ≡ fsection alse non-critical q1: non-critical section wantp ¿ true q2: wantq ¿ true ⇒ ⟨ p ∧ f alse ≡ f alse⟩ while wantq q3: while wantp if¬(p4 turn =∧2q4) q4: if turn = 1 wantp ¿ false await turn = 1 q3 wantp ¿ true critical section turn ¿ 2 wantp ¿¬(p4 false ∧ q4) q5: q6: q7: q8: q9: q10: wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false Lemma 4.10 It is an exercise for the student to prove these lemmas and to use turn = 1 ∨ turn = 2 c M. Ben-Ari 2006 M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition ≠ Slide 4.12 them to prove that Dekker’s p3..5 ∨ p8..10 ≡ want p algorithm satisfies mutual exclusion. q3..5 ∨ q8..10 ≡ wantq integer tur p Proof of starvation-free p1: p2: ! (p8 ⇒ " p9) q1 ⇒ " q2 p3: p4: " ! q1 p4 ∧ ! (turn = 2) ⇒ " p5 p4 ∧ (turn = 2) ⇒ " p5 p4 ∧ ¬(turn = 2) ⇒ " p3 ! " ¬q1 p5: p6: p7: p8: p9: p10: loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false q " ! A ∧ (! A ⇒ " B) ⇒ " B p, q := q, p M. Ben-Ari. Principles of Concurrent and Dis integer tur p Proof of starvation-free p1: p2: ! (p8 ⇒ " p9) q1 ⇒ " q2 p3: p4: " ! q1 p4 ∧ ! (turn = 2) ⇒ " p5 p4 ∧ (turn = 2) ⇒ " p5 p4 ∧ ¬(turn = 2) ⇒ " p3 ! " ¬q1 p5: p6: p7: p8: p9: p10: loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false q " ! A ∧ (! A ⇒ " B) ⇒ " B p, q := q, p M. Ben-Ari. Principles of Concurrent and Dis integer tur p Proof of starvation-free p1: p2: ! (p8 ⇒ " p9) q1 ⇒ " q2 p3: p4: " ! q1 p4 ∧ ! (turn = 2) ⇒ " p5 p4 ∧ (turn = 2) ⇒ " p5 p4 ∧ ¬(turn = 2) ⇒ " p3 ! " ¬q1 p5: p6: p7: p8: p9: p10: loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false q " ! A ∧ (! A ⇒ " B) ⇒ " B p, q := q, p M. Ben-Ari. Principles of Concurrent and Dis Proof integer turn ¿ 1 ofp starvation-free loop forever p1: non-critical section p2: wantp ¿ true ! (p8 ⇒ " p9) p3: while wantq if turn = 2 q1 ⇒ " q2 p4: p5: wantp ¿ false ! " ¬q1 p6: await turn = 1 " ! q1 p7: wantp ¿ true p4 ∧ ! (turnp8:= 2)critical ⇒ "section p5 p9: turn ¿ 2 p10: wantp ¿ false p4 ∧ (turn = 2) ⇒ " p5 p4 ∧ ¬(turn = 2) ⇒ " p3 q1: q2: q3: q4: q5: q6: q7: q8: q9: q10: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false q " ! A ∧ (! A ⇒ " B) ⇒ " B c M. Ben-Ari 200 M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition ≠ p, q := q, p integer tur p Proof of starvation-free p1: p2: ! (p8 ⇒ " p9) q1 ⇒ " q2 p3: p4: " ! q1 p4 ∧ ! (turn = 2) ⇒ " p5 p4 ∧ (turn = 2) ⇒ " p5 p4 ∧ ¬(turn = 2) ⇒ " p3 ! " ¬q1 p5: p6: p7: p8: p9: p10: loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false q " ! A ∧ (! A ⇒ " B) ⇒ " B p, q := q, p M. Ben-Ari. Principles of Concurrent and Dis integer tur p Proof of starvation-free p1: p2: ! (p8 ⇒ " p9) q1 ⇒ " q2 p3: p4: " ! q1 p4 ∧ ! (turn = 2) ⇒ " p5 p4 ∧ (turn = 2) ⇒ " p5 p4 ∧ ¬(turn = 2) ⇒ " p3 ! " ¬q1 p5: p6: p7: p8: p9: p10: loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false q " ! A ∧ (! A ⇒ " B) ⇒ " B p, q := q, p M. Ben-Ari. Principles of Concurrent and Dis integer tur p Proof of starvation-free p1: p2: ! (p8 ⇒ " p9) q1 ⇒ " q2 p3: p4: " ! q1 p4 ∧ ! (turn = 2) ⇒ " p5 p4 ∧ (turn = 2) ⇒ " p5 p4 ∧ ¬(turn = 2) ⇒ " p3 ! " ¬q1 p5: p6: p7: p8: p9: p10: loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false q " ! A ∧ (! A ⇒ " B) ⇒ " B p, q := q, p M. Ben-Ari. Principles of Concurrent and Dis integer tur p Proof of starvation-free p1: p2: ! (p8 ⇒ " p9) q1 ⇒ " q2 p3: p4: " ! q1 p4 ∧ ! (turn = 2) ⇒ " p5 p4 ∧ (turn = 2) ⇒ " p5 p4 ∧ ¬(turn = 2) ⇒ " p3 ! " ¬q1 p5: p6: p7: p8: p9: p10: loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false q " ! A ∧ (! A ⇒ " B) ⇒ " B p, q := q, p M. Ben-Ari. Principles of Concurrent and Dis integer tur p Proof of starvation-free p1: p2: ! (p8 ⇒ " p9) q1 ⇒ " q2 p3: p4: " ! q1 p4 ∧ ! (turn = 2) ⇒ " p5 p4 ∧ (turn = 2) ⇒ " p5 p4 ∧ ¬(turn = 2) ⇒ " p3 ! " ¬q1 p5: p6: p7: p8: p9: p10: loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false q " ! A ∧ (! A ⇒ " B) ⇒ " B p, q := q, p M. Ben-Ari. Principles of Concurrent and Dis Proof p p integer turn ¿ 1 ofqp starvation-free loop = forever ! want p ∧ !turn 1 ⇒ " ! ¬wantq p1: non-critical qsection p2:!turn wantp ! want p ∧ = 1¿ ⇒true " ! ¬wantq p3: p4: while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section ⟩ turn ¿ 2 wantp ¿ false q1: q2: q3: q4: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false p5: q5: q1 p6: q6: ⇒ ⟨ q1 ⇒ " q2⟩ q1q2 p7: q7: " p8: q8: ⇒ ⟨⟨ q1 ⇒ " q2⟩ ⇒ p9: q9: " q2 " q3 p10: q10: ⇒ ⟨ ⟩ ⇒ ⟨ ! want p⟩ " q4 q3 " ⇒ ⟨⟨ ! want= p⟩1⟩ ⇒ !turn c M. Ben-Ari 200 M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition ≠ " q4 " q5 ⇒ ⟨⟨ !turn = 1⟩ ⇒ ⟩ " q6 q5 " ⇒ ⟨⟨ ⟩ ⇒ !turn = 1⟩ "! q6q6 " Proof p p integer turn ¿ 1 ofqp starvation-free loop = forever ! want p ∧ !turn 1 ⇒ " ! ¬wantq p1: non-critical qsection p2:!turn wantp ! want p ∧ = 1¿ ⇒true " ! ¬wantq p3: p4: while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section ⟩ turn ¿ 2 wantp ¿ false q1: q2: q3: q4: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false p5: q5: q1 p6: q6: ⇒ ⟨ q1 ⇒ " q2⟩ q1q2 p7: q7: " p8: q8: ⇒ ⟨⟨ q1 ⇒ " q2⟩ ⇒ p9: q9: " q2 " q3 p10: q10: ⇒ ⟨ ⟩ ⇒ ⟨ ! want p⟩ " q4 q3 " ⇒ ⟨⟨ ! want= p⟩1⟩ ⇒ !turn c M. Ben-Ari 200 M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition ≠ " q4 " q5 ⇒ ⟨⟨ !turn = 1⟩ ⇒ ⟩ " q6 q5 " ⇒ ⟨⟨ ⟩ ⇒ !turn = 1⟩ "! q6q6 " Proof p p integer turn ¿ 1 ofqp starvation-free loop = forever ! want p ∧ !turn 1 ⇒ " ! ¬wantq p1: non-critical qsection p2:!turn wantp ! want p ∧ = 1¿ ⇒true " ! ¬wantq p3: p4: while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section ⟩ turn ¿ 2 wantp ¿ false q1: q2: q3: q4: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false p5: q5: q1 p6: q6: ⇒ ⟨ q1 ⇒ " q2⟩ q1q2 p7: q7: " p8: q8: ⇒ ⟨⟨ q1 ⇒ " q2⟩ ⇒ p9: q9: " q2 " q3 p10: q10: ⇒ ⟨ ⟩ ⇒ ⟨ ! want p⟩ " q4 q3 " ⇒ ⟨⟨ ! want= p⟩1⟩ ⇒ !turn c M. Ben-Ari 200 M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition ≠ " q4 " q5 ⇒ ⟨⟨ !turn = 1⟩ ⇒ ⟩ " q6 q5 " ⇒ ⟨⟨ ⟩ ⇒ !turn = 1⟩ "! q6q6 " Proof p p integer turn ¿ 1 ofqp starvation-free loop = forever ! want p ∧ !turn 1 ⇒ " ! ¬wantq p1: non-critical qsection p2:!turn wantp ! want p ∧ = 1¿ ⇒true " ! ¬wantq p3: p4: while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section ⟩ turn ¿ 2 wantp ¿ false q1: q2: q3: q4: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false p5: q5: q1 p6: q6: ⇒ ⟨ q1 ⇒ " q2⟩ q1q2 p7: q7: " p8: q8: ⇒ ⟨⟨ q1 ⇒ " q2⟩ ⇒ p9: q9: " q2 " q3 p10: q10: ⇒ ⟨ ⟩ ⇒ ⟨ ! want p⟩ " q4 q3 " ⇒ ⟨⟨ ! want= p⟩1⟩ ⇒ !turn c M. Ben-Ari 200 M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition ≠ " q4 " q5 ⇒ ⟨⟨ !turn = 1⟩ ⇒ ⟩ " q6 q5 " ⇒ ⟨⟨ ⟩ ⇒ !turn = 1⟩ "! q6q6 " Proof p p integer turn ¿ 1 ofqp starvation-free loop = forever ! want p ∧ !turn 1 ⇒ " ! ¬wantq p1: non-critical qsection p2:!turn wantp ! want p ∧ = 1¿ ⇒true " ! ¬wantq p3: p4: while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section ⟩ turn ¿ 2 wantp ¿ false q1: q2: q3: q4: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false p5: q5: q1 p6: q6: ⇒ ⟨ q1 ⇒ " q2⟩ q1q2 p7: q7: " p8: q8: ⇒ ⟨⟨ q1 ⇒ " q2⟩ ⇒ p9: q9: " q2 " q3 p10: q10: ⇒ ⟨ ⟩ ⇒ ⟨ ! want p⟩ " q4 q3 " ⇒ ⟨⟨ ! want= p⟩1⟩ ⇒ !turn c M. Ben-Ari 200 M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition ≠ " q4 " q5 ⇒ ⟨⟨ !turn = 1⟩ ⇒ ⟩ " q6 q5 " ⇒ ⟨⟨ ⟩ ⇒ !turn = 1⟩ "! q6q6 " Proof p p integer turn ¿ 1 ofqp starvation-free loop = forever ! want p ∧ !turn 1 ⇒ " ! ¬wantq p1: non-critical qsection p2:!turn wantp ! want p ∧ = 1¿ ⇒true " ! ¬wantq p3: p4: while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section ⟩ turn ¿ 2 wantp ¿ false q1: q2: q3: q4: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false p5: q5: q1 p6: q6: ⇒ ⟨ q1 ⇒ " q2⟩ q1q2 p7: q7: " p8: q8: ⇒ ⟨⟨ q1 ⇒ " q2⟩ ⇒ p9: q9: " q2 " q3 p10: q10: ⇒ ⟨ ⟩ ⇒ ⟨ ! want p⟩ " q4 q3 " ⇒ ⟨⟨ ! want= p⟩1⟩ ⇒ !turn c M. Ben-Ari 200 M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition ≠ " q4 " q5 ⇒ ⟨⟨ !turn = 1⟩ ⇒ ⟩ " q6 q5 " ⇒ ⟨⟨ ⟩ ⇒ !turn = 1⟩ "! q6q6 " Proof p p integer turn ¿ 1 ofqp starvation-free loop = forever ! want p ∧ !turn 1 ⇒ " ! ¬wantq p1: non-critical qsection p2:!turn wantp ! want p ∧ = 1¿ ⇒true " ! ¬wantq p3: p4: while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section ⟩ turn ¿ 2 wantp ¿ false q1: q2: q3: q4: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false p5: q5: q1 p6: q6: ⇒ ⟨ q1 ⇒ " q2⟩ q1q2 p7: q7: " p8: q8: ⇒ ⟨⟨ q1 ⇒ " q2⟩ ⇒ p9: q9: " q2 " q3 p10: q10: ⇒ ⟨ ⟩ ⇒ ⟨ ! want p⟩ " q4 q3 " ⇒ ⟨⟨ ! want= p⟩1⟩ ⇒ !turn c M. Ben-Ari 200 M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition ≠ " q4 " q5 ⇒ ⟨⟨ !turn = 1⟩ ⇒ ⟩ " q6 q5 " ⇒ ⟨⟨ ⟩ ⇒ !turn = 1⟩ "! q6q6 " Proof p p integer turn ¿ 1 ofqp starvation-free loop = forever ! want p ∧ !turn 1 ⇒ " ! ¬wantq p1: non-critical qsection p2:!turn wantp ! want p ∧ = 1¿ ⇒true " ! ¬wantq p3: p4: while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section ⟩ turn ¿ 2 wantp ¿ false q1: q2: q3: q4: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false p5: q5: q1 p6: q6: ⇒ ⟨ q1 ⇒ " q2⟩ q1q2 p7: q7: " p8: q8: ⇒ ⟨⟨ q1 ⇒ " q2⟩ ⇒ p9: q9: " q2 " q3 p10: q10: ⇒ ⟨ ⟩ ⇒ ⟨ ! want p⟩ " q4 q3 " ⇒ ⟨⟨ ! want= p⟩1⟩ ⇒ !turn c M. Ben-Ari 200 M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition ≠ " q4 " q5 ⇒ ⟨⟨ !turn = 1⟩ ⇒ ⟩ " q6 q5 " ⇒ ⟨⟨ ⟩ ⇒ !turn = 1⟩ "! q6q6 " Proof p p integer turn ¿ 1 ofqp starvation-free loop = forever ! want p ∧ !turn 1 ⇒ " ! ¬wantq p1: non-critical qsection p2:!turn wantp ! want p ∧ = 1¿ ⇒true " ! ¬wantq p3: p4: while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section ⟩ turn ¿ 2 wantp ¿ false q1: q2: q3: q4: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false p5: q5: q1 p6: q6: ⇒ ⟨ q1 ⇒ " q2⟩ q1q2 p7: q7: " p8: q8: ⇒ ⟨⟨ q1 ⇒ " q2⟩ ⇒ p9: q9: " q2 " q3 p10: q10: ⇒ ⟨ ⟩ ⇒ ⟨ ! want p⟩ " q4 q3 " ⇒ ⟨⟨ ! want= p⟩1⟩ ⇒ !turn c M. Ben-Ari 200 M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition ≠ " q4 " q5 ⇒ ⟨⟨ !turn = 1⟩ ⇒ ⟩ " q6 q5 " ⇒ ⟨⟨ ⟩ ⇒ !turn = 1⟩ "! q6q6 " Proof p p integer turn ¿ 1 ofqp starvation-free loop = forever ! want p ∧ !turn 1 ⇒ " ! ¬wantq p1: non-critical qsection p2:!turn wantp ! want p ∧ = 1¿ ⇒true " ! ¬wantq p3: p4: while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section ⟩ turn ¿ 2 wantp ¿ false q1: q2: q3: q4: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false p5: q5: q1 p6: q6: ⇒ ⟨ q1 ⇒ " q2⟩ q1q2 p7: q7: " p8: q8: ⇒ ⟨⟨ q1 ⇒ " q2⟩ ⇒ p9: q9: " q2 " q3 p10: q10: ⇒ ⟨ ⟩ ⇒ ⟨ ! want p⟩ " q4 q3 " ⇒ ⟨⟨ ! want= p⟩1⟩ ⇒ !turn c M. Ben-Ari 200 M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition ≠ " q4 " q5 ⇒ ⟨⟨ !turn = 1⟩ ⇒ ⟩ " q6 q5 " ⇒ ⟨⟨ ⟩ ⇒ !turn = 1⟩ "! q6q6 " ⇒ ⟨ ⟩ integer turn ¿ 1 Proof ofp starvation-free " q6 loop forever ⇒p ⟨ !turn = 1⟩ p1: non-critical qsection q1: " !!q6want p ∧ p2:!turn wantp q2: = 1¿ ⇒true " ! ¬wantq while wantq p4: if turn = 2 p5: wantp ¿ false " ! q6 p6: await turn = 1 p7: true ⇒q1 ⟨ q3...5wantp ¿ q8..10⟩ p8: critical section ⇒ " ⟨ !q1 ⇒ " q2⟩ ¬(q3...5 ∨ q8..10) p9: turn ¿ 2 " q2 ⇒ ⟨ q3..5 ≡ false wantq⟩ p10:∨ q8..10 wantp ¿ p3: q3: q4: q5: q6: q7: q8: q9: q10: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false ⇒ ⟨ ⟩ " ! ¬wantq " q3 ⇒ ⟨ ! want p⟩ c M. Ben-Ari 200 M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition ≠ " q4 ⇒ p2 ⟨ ⇒ " p8 !turn = 1⟩ " q5 ⇒ p2 ⟨ ∧ ¬" p8 ⟩ " q6 ⇒ ⟨ ⟩ integer turn ¿ 1 Proof ofp starvation-free " q6 loop forever ⇒p ⟨ !turn = 1⟩ p1: non-critical qsection q1: " !!q6want p ∧ p2:!turn wantp q2: = 1¿ ⇒true " ! ¬wantq while wantq p4: if turn = 2 p5: wantp ¿ false " ! q6 p6: await turn = 1 p7: true ⇒q1 ⟨ q3...5wantp ¿ q8..10⟩ p8: critical section ⇒ " ⟨ !q1 ⇒ " q2⟩ ¬(q3...5 ∨ q8..10) p9: turn ¿ 2 " q2 ⇒ ⟨ q3..5 ≡ false wantq⟩ p10:∨ q8..10 wantp ¿ p3: q3: q4: q5: q6: q7: q8: q9: q10: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false ⇒ ⟨ ⟩ " ! ¬wantq " q3 ⇒ ⟨ ! want p⟩ c M. Ben-Ari 200 M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition ≠ " q4 ⇒ p2 ⟨ ⇒ " p8 !turn = 1⟩ " q5 ⇒ p2 ⟨ ∧ ¬" p8 ⟩ " q6 ⇒ ⟨ ⟩ integer turn ¿ 1 Proof ofp starvation-free " q6 loop forever ⇒p ⟨ !turn = 1⟩ p1: non-critical qsection q1: " !!q6want p ∧ p2:!turn wantp q2: = 1¿ ⇒true " ! ¬wantq while wantq p4: if turn = 2 p5: wantp ¿ false " ! q6 p6: await turn = 1 p7: true ⇒q1 ⟨ q3...5wantp ¿ q8..10⟩ p8: critical section ⇒ " ⟨ !q1 ⇒ " q2⟩ ¬(q3...5 ∨ q8..10) p9: turn ¿ 2 " q2 ⇒ ⟨ q3..5 ≡ false wantq⟩ p10:∨ q8..10 wantp ¿ p3: q3: q4: q5: q6: q7: q8: q9: q10: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false ⇒ ⟨ ⟩ " ! ¬wantq " q3 ⇒ ⟨ ! want p⟩ c M. Ben-Ari 200 M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition ≠ " q4 ⇒ p2 ⟨ ⇒ " p8 !turn = 1⟩ " q5 ⇒ p2 ⟨ ∧ ¬" p8 ⟩ " q6 ⇒ ⟨ ⟩ integer turn ¿ 1 Proof ofp starvation-free " q6 loop forever ⇒p ⟨ !turn = 1⟩ p1: non-critical qsection q1: " !!q6want p ∧ p2:!turn wantp q2: = 1¿ ⇒true " ! ¬wantq while wantq p4: if turn = 2 p5: wantp ¿ false " ! q6 p6: await turn = 1 p7: true ⇒q1 ⟨ q3...5wantp ¿ q8..10⟩ p8: critical section ⇒ " ⟨ !q1 ⇒ " q2⟩ ¬(q3...5 ∨ q8..10) p9: turn ¿ 2 " q2 ⇒ ⟨ q3..5 ≡ false wantq⟩ p10:∨ q8..10 wantp ¿ p3: q3: q4: q5: q6: q7: q8: q9: q10: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false ⇒ ⟨ ⟩ " ! ¬wantq " q3 ⇒ ⟨ ! want p⟩ c M. Ben-Ari 200 M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition ≠ " q4 ⇒ p2 ⟨ ⇒ " p8 !turn = 1⟩ " q5 ⇒ p2 ⟨ ∧ ¬" p8 ⟩ " q6 ⇒ ⟨ ⟩ integer turn ¿ 1 Proof ofp starvation-free " q6 loop forever ⇒p ⟨ !turn = 1⟩ p1: non-critical qsection q1: " !!q6want p ∧ p2:!turn wantp q2: = 1¿ ⇒true " ! ¬wantq while wantq p4: if turn = 2 p5: wantp ¿ false " ! q6 p6: await turn = 1 p7: true ⇒q1 ⟨ q3...5wantp ¿ q8..10⟩ p8: critical section ⇒ " ⟨ !q1 ⇒ " q2⟩ ¬(q3...5 ∨ q8..10) p9: turn ¿ 2 " q2 ⇒ ⟨ q3..5 ≡ false wantq⟩ p10:∨ q8..10 wantp ¿ p3: q3: q4: q5: q6: q7: q8: q9: q10: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false ⇒ ⟨ ⟩ " ! ¬wantq " q3 ⇒ ⟨ ! want p⟩ c M. Ben-Ari 200 M. Ben-Ari. Principles of Concurrent and Distributed Programming, Second edition ≠ " q4 ⇒ p2 ⟨ ⇒ " p8 !turn = 1⟩ " q5 ⇒ p2 ⟨ ∧ ¬" p8 ⟩ " q6 Proof of starvation-free p p2 ⇒ ! p8 ¬(p2 ⇒ ! p8) ⟨ p ⇒ q ≡ ¬p ∨ q⟩ ¬(¬p2 ∨ ! p8) ⟨ ⟩ p2 ∧ ¬! p8 ⇒ ⟨ p2 ∧ ¬! p8 ⇒ p3, p4 p3, p4 p1: p2: p3: p4: p5: p6: p7: p8: p9: p10: ⟩ integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis p3, p4 ⟨ p3..5 ∨ p8..10 ≡ want p ⟩ " want p ∧ "turn = 1 Proof of starvation-free p p2 ⇒ ! p8 ¬(p2 ⇒ ! p8) ⟨ p ⇒ q ≡ ¬p ∨ q⟩ ¬(¬p2 ∨ ! p8) ⟨ ⟩ p2 ∧ ¬! p8 ⇒ ⟨ p2 ∧ ¬! p8 ⇒ p3, p4 p3, p4 p1: p2: p3: p4: p5: p6: p7: p8: p9: p10: ⟩ integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis p3, p4 ⟨ p3..5 ∨ p8..10 ≡ want p ⟩ " want p ∧ "turn = 1 Proof of starvation-free p p2 ⇒ ! p8 ¬(p2 ⇒ ! p8) ⟨ p ⇒ q ≡ ¬p ∨ q⟩ ¬(¬p2 ∨ ! p8) ⟨ ⟩ p2 ∧ ¬! p8 ⇒ ⟨ p2 ∧ ¬! p8 ⇒ p3, p4 p3, p4 p1: p2: p3: p4: p5: p6: p7: p8: p9: ⟩ p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis p3, p4 ⟨ p3..5 ∨ p8..10 ≡ want p ⟩ " want p ∧ "turn = 1 Proof of starvation-free p p2 ⇒ ! p8 ¬(p2 ⇒ ! p8) ⟨ p ⇒ q ≡ ¬p ∨ q⟩ ¬(¬p2 ∨ ! p8) ⟨ ⟩ p2 ∧ ¬! p8 ⇒ ⟨ p2 ∧ ¬! p8 ⇒ p3, p4 p3, p4 p1: p2: p3: p4: p5: p6: p7: p8: p9: ⟩ p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis p3, p4 ⟨ p3..5 ∨ p8..10 ≡ want p ⟩ " want p ∧ "turn = 1 Proof of starvation-free p p2 ⇒ ! p8 ¬(p2 ⇒ ! p8) ⟨ p ⇒ q ≡ ¬p ∨ q⟩ ¬(¬p2 ∨ ! p8) ⟨ ⟩ p2 ∧ ¬! p8 ⇒ ⟨ p2 ∧ ¬! p8 ⇒ p3, p4 p3, p4 p1: p2: p3: p4: p5: p6: p7: p8: p9: ⟩ p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis p3, p4 ⟨ p3..5 ∨ p8..10 ≡ want p ⟩ " want p ∧ "turn = 1 Proof of starvation-free p p2 ⇒ ! p8 ¬(p2 ⇒ ! p8) ⟨ p ⇒ q ≡ ¬p ∨ q⟩ ¬(¬p2 ∨ ! p8) ⟨ ⟩ p2 ∧ ¬! p8 ⇒ ⟨ p2 ∧ ¬! p8 ⇒ p3, p4 p3, p4 p1: p2: p3: p4: p5: p6: p7: p8: p9: ⟩ p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis p3, p4 ⟨ p3..5 ∨ p8..10 ≡ want p ⟩ " want p ∧ "turn = 1 Proof of starvation-free p p2 ⇒ ! p8 ¬(p2 ⇒ ! p8) ⟨ p ⇒ q ≡ ¬p ∨ q⟩ ¬(¬p2 ∨ ! p8) ⟨ ⟩ p2 ∧ ¬! p8 ⇒ ⟨ p2 ∧ ¬! p8 ⇒ p3, p4 p3, p4 p1: p2: p3: p4: p5: p6: p7: p8: p9: ⟩ p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis p3, p4 ⟨ p3..5 ∨ p8..10 ≡ want p ⟩ " want p ∧ "turn = 1 Proof of starvation-free p p2 ⇒ ! p8 ¬(p2 ⇒ ! p8) ⟨ p ⇒ q ≡ ¬p ∨ q⟩ ¬(¬p2 ∨ ! p8) ⟨ ⟩ p2 ∧ ¬! p8 ⇒ ⟨ p2 ∧ ¬! p8 ⇒ p3, p4 p3, p4 p1: p2: p3: p4: p5: p6: p7: p8: p9: ⟩ p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis p3, p4 ⟨ p3..5 ∨ p8..10 ≡ want p ⟩ " want p ∧ "turn = 1 Proof of starvation-free p p2 ⇒ ! p8 ¬(p2 ⇒ ! p8) ⟨ p ⇒ q ≡ ¬p ∨ q⟩ ¬(¬p2 ∨ ! p8) ⟨ ⟩ p2 ∧ ¬! p8 ⇒ ⟨ p2 ∧ ¬! p8 ⇒ p3, p4 p3, p4 p1: p2: p3: p4: p5: p6: p7: p8: p9: ⟩ p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis p3, p4 ⟨ p3..5 ∨ p8..10 ≡ want p ⟩ " want p ∧ "turn = 1 p2 ∧ ¬! p8 ⇒ ⟨ p3, p4p Proof of starvation-free p2 ∧ ¬! p8 ⇒ p3, p4 p2 ⇒ ! p8 p3, p4⇒ ! p8) ¬(p2 ⟨⟨ p3..5 ≡q⟩ want p p ⇒∨qp8..10 ≡ ¬p ∨ ¬(¬p2 ∨ ! p8) ⟩ " ⟨want p ∧ "turn = 1 ⟩ ⇒ p2⟨ ∧ ¬! p8 = 1p8 ⇒⇒ !" ⇒ ⟨" want p ∧ "turn p2 ∧ ¬! p3,¬wantq⟩ p4 ! "p4 ¬wantq p3, ⇒ ⟨ ⟩ ¬(p3, p4 p3, p4 ⟨ p3..5 ∨ p8..10 ≡ want p ⟩ " want p ∧ "turn = 1 ⟩ p1: p2: p3: p4: p5: p6: p7: p8: p9: p10: ⟩ integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis p2 ∧ ¬! p8 ⇒ ⟨ p3, p4p Proof of starvation-free p2 ∧ ¬! p8 ⇒ p3, p4 p2 ⇒ ! p8 p3, p4⇒ ! p8) ¬(p2 ⟨⟨ p3..5 ≡q⟩ want p p ⇒∨qp8..10 ≡ ¬p ∨ ¬(¬p2 ∨ ! p8) ⟩ " ⟨want p ∧ "turn = 1 ⟩ ⇒ p2⟨ ∧ ¬! p8 = 1p8 ⇒⇒ !" ⇒ ⟨" want p ∧ "turn p2 ∧ ¬! p3,¬wantq⟩ p4 ! "p4 ¬wantq p3, ⇒ ⟨ ⟩ ¬(p3, p4 p3, p4 ⟨ p3..5 ∨ p8..10 ≡ want p ⟩ " want p ∧ "turn = 1 ⟩ p1: p2: p3: p4: p5: p6: p7: p8: p9: p10: ⟩ integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis p2 ∧ ¬! p8 ⇒ ⟨ p3, p4p Proof of starvation-free p2 ∧ ¬! p8 ⇒ p3, p4 p2 ⇒ ! p8 p3, p4⇒ ! p8) ¬(p2 ⟨⟨ p3..5 ≡q⟩ want p p ⇒∨qp8..10 ≡ ¬p ∨ ¬(¬p2 ∨ ! p8) ⟩ " ⟨want p ∧ "turn = 1 ⟩ ⇒ p2⟨ ∧ ¬! p8 = 1p8 ⇒⇒ !" ⇒ ⟨" want p ∧ "turn p2 ∧ ¬! p3,¬wantq⟩ p4 ! "p4 ¬wantq p3, ⇒ ⟨ ⟩ ¬(p3, p4 p3, p4 ⟨ p3..5 ∨ p8..10 ≡ want p ⟩ " want p ∧ "turn = 1 ⟩ p1: p2: p3: p4: p5: p6: p7: p8: p9: p10: ⟩ integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis p2 ∧ ¬! p8 ⇒ ⟨ p3, p4p Proof of starvation-free p2 ∧ ¬! p8 ⇒ p3, p4 p2 ⇒ ! p8 p3, p4⇒ ! p8) ¬(p2 ⟨⟨ p3..5 ≡q⟩ want p p ⇒∨qp8..10 ≡ ¬p ∨ ¬(¬p2 ∨ ! p8) ⟩ " ⟨want p ∧ "turn = 1 ⟩ ⇒ p2⟨ ∧ ¬! p8 = 1p8 ⇒⇒ !" ⇒ ⟨" want p ∧ "turn p2 ∧ ¬! p3,¬wantq⟩ p4 ! "p4 ¬wantq p3, ⇒ ⟨ ⟩ ¬(p3, p4 p3, p4 ⟨ p3..5 ∨ p8..10 ≡ want p ⟩ " want p ∧ "turn = 1 ⟩ p1: p2: p3: p4: p5: p6: p7: p8: p9: p10: ⟩ integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis p2 ∧ ¬! p8 ⇒ ⟨ p3, p4p Proof of starvation-free p2 ∧ ¬! p8 ⇒ p3, p4 p2 ⇒ ! p8 p3, p4⇒ ! p8) ¬(p2 ⟨⟨ p3..5 ≡q⟩ want p p ⇒∨qp8..10 ≡ ¬p ∨ ¬(¬p2 ∨ ! p8) ⟩ " ⟨want p ∧ "turn = 1 ⟩ ⇒ p2⟨ ∧ ¬! p8 = 1p8 ⇒⇒ !" ⇒ ⟨" want p ∧ "turn p2 ∧ ¬! p3,¬wantq⟩ p4 ! "p4 ¬wantq p3, ⇒ ⟨ ⟩ ¬(p3, p4 p3, p4 ⟨ p3..5 ∨ p8..10 ≡ want p ⟩ " want p ∧ "turn = 1 ⟩ p1: p2: p3: p4: p5: p6: p7: p8: p9: p10: ⟩ integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis p2 ∧ ¬! p8 ⇒ ⟨ p3, p4p Proof of starvation-free p2 ∧ ¬! p8 ⇒ p3, p4 p2 ⇒ ! p8 p3, p4⇒ ! p8) ¬(p2 ⟨⟨ p3..5 ≡q⟩ want p p ⇒∨qp8..10 ≡ ¬p ∨ ¬(¬p2 ∨ ! p8) ⟩ " ⟨want p ∧ "turn = 1 ⟩ ⇒ p2⟨ ∧ ¬! p8 = 1p8 ⇒⇒ !" ⇒ ⟨" want p ∧ "turn p2 ∧ ¬! p3,¬wantq⟩ p4 ! "p4 ¬wantq p3, ⇒ ⟨ ⟩ ¬(p3, p4 p3, p4 ⟨ p3..5 ∨ p8..10 ≡ want p ⟩ " want p ∧ "turn = 1 ⟩ p1: p2: p3: p4: p5: p6: p7: p8: p9: p10: ⟩ integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis p2 ∧ ¬! p8 ⇒ ⟨ p3, p4p Proof of starvation-free p2 ∧ ¬! p8 ⇒ p3, p4 p2 ⇒ ! p8 p3, p4⇒ ! p8) ¬(p2 ⟨⟨ p3..5 ≡q⟩ want p p ⇒∨qp8..10 ≡ ¬p ∨ ¬(¬p2 ∨ ! p8) ⟩ " ⟨want p ∧ "turn = 1 ⟩ ⇒ p2⟨ ∧ ¬! p8 = 1p8 ⇒⇒ !" ⇒ ⟨" want p ∧ "turn p2 ∧ ¬! p3,¬wantq⟩ p4 ! "p4 ¬wantq p3, ⇒ ⟨ ⟩ ¬(p3, p4 p3, p4 ⟨ p3..5 ∨ p8..10 ≡ want p ⟩ " want p ∧ "turn = 1 ⟩ p1: p2: p3: p4: p5: p6: p7: p8: p9: p10: ⟩ integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis p2 ∧ ¬! p8 ⇒ ⟨ p3, p4p Proof of starvation-free p2 ∧ ¬! p8 ⇒ p3, p4 p2 ⇒ ! p8 p3, p4⇒ ! p8) ¬(p2 ⟨⟨ p3..5 ≡q⟩ want p p ⇒∨qp8..10 ≡ ¬p ∨ ¬(¬p2 ∨ ! p8) ⟩ " ⟨want p ∧ "turn = 1 ⟩ ⇒ p2⟨ ∧ ¬! p8 = 1p8 ⇒⇒ !" ⇒ ⟨" want p ∧ "turn p2 ∧ ¬! p3,¬wantq⟩ p4 ! "p4 ¬wantq p3, ⇒ ⟨ ⟩ ¬(p3, p4 p3, p4 ⟨ p3..5 ∨ p8..10 ≡ want p ⟩ " want p ∧ "turn = 1 ⟩ p1: p2: p3: p4: p5: p6: p7: p8: p9: p10: ⟩ integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis Proof of starvation-free p2 ∧ ¬! p8 ⇒ p3, p4 p1: p2: p3: p4: p5: p6: p2 ∧ ¬! p8 ⇒ ⟨ p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ ¬"turn = 2 ⟨ " ¬" p ⇒ ! ¬p⟩ ! ¬turn = 2 ⇒ ⟨ turn = 1 ∨ turn = 2⟩ !turn = 1 p2 ∧ ¬! p8 p7: p8: p9: p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis Proof of starvation-free p2 ∧ ¬! p8 ⇒ p3, p4 p2 ∧ ¬! p8 ⇒ p3, p4 p1: p2: p3: p4: p2 ∧ ¬! p8 ⇒ p2⟨ ∧ ¬! p8 p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ ¬"turn = 2 ⇒ ⟨ p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ ⟨ " ¬" p ≡ ! ¬p⟩ ¬"turn = 2 ! ¬turn = 2 ⟨ " ¬" p ⇒ ! ¬p⟩ ⇒ ⟨ turn = 1 ∨ turn = 2⟩ ! ¬turn !turn = 1= 2 ⇒ ⟨ turn = 1 ∨ turn = 2⟩ !turn = 1 p2 ∧ ¬! p8 ⇒ ⟨p9 p8⟩ p9 p2 ∧ ¬! p8 p5: p6: p7: p8: p9: p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis Proof of starvation-free p2 ∧ ¬! p8 ⇒ p3, p4 p2 ∧ ¬! p8 ⇒ p3, p4 p1: p2: p3: p4: p2 ∧ ¬! p8 ⇒ p2⟨ ∧ ¬! p8 p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ ¬"turn = 2 ⇒ ⟨ p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ ⟨ " ¬" p ≡ ! ¬p⟩ ¬"turn = 2 ! ¬turn = 2 ⟨ " ¬" p ⇒ ! ¬p⟩ ⇒ ⟨ turn = 1 ∨ turn = 2⟩ ! ¬turn !turn = 1= 2 ⇒ ⟨ turn = 1 ∨ turn = 2⟩ !turn = 1 p2 ∧ ¬! p8 ⇒ ⟨p9 p8⟩ p9 p2 ∧ ¬! p8 p5: p6: p7: p8: p9: p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis Proof of starvation-free p2 ∧ ¬! p8 ⇒ p3, p4 p2 ∧ ¬! p8 ⇒ p3, p4 p1: p2: p3: p4: p2 ∧ ¬! p8 ⇒ p2⟨ ∧ ¬! p8 p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ ¬"turn = 2 ⇒ ⟨ p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ ⟨ " ¬" p ≡ ! ¬p⟩ ¬"turn = 2 ! ¬turn = 2 ⟨ " ¬" p ⇒ ! ¬p⟩ ⇒ ⟨ turn = 1 ∨ turn = 2⟩ ! ¬turn !turn = 1= 2 ⇒ ⟨ turn = 1 ∨ turn = 2⟩ !turn = 1 p2 ∧ ¬! p8 ⇒ ⟨p9 p8⟩ p9 p2 ∧ ¬! p8 p5: p6: p7: p8: p9: p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis Proof of starvation-free p2 ∧ ¬! p8 ⇒ p3, p4 p2 ∧ ¬! p8 ⇒ p3, p4 p1: p2: p3: p4: p2 ∧ ¬! p8 ⇒ p2⟨ ∧ ¬! p8 p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ ¬"turn = 2 ⇒ ⟨ p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ ⟨ " ¬" p ≡ ! ¬p⟩ ¬"turn = 2 ! ¬turn = 2 ⟨ " ¬" p ⇒ ! ¬p⟩ ⇒ ⟨ turn = 1 ∨ turn = 2⟩ ! ¬turn !turn = 1= 2 ⇒ ⟨ turn = 1 ∨ turn = 2⟩ !turn = 1 p2 ∧ ¬! p8 ⇒ ⟨p9 p8⟩ p9 p2 ∧ ¬! p8 p5: p6: p7: p8: p9: p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis Proof of starvation-free p2 ∧ ¬! p8 ⇒ p3, p4 p2 ∧ ¬! p8 ⇒ p3, p4 p1: p2: p3: p4: p2 ∧ ¬! p8 ⇒ p2⟨ ∧ ¬! p8 p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ ¬"turn = 2 ⇒ ⟨ p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ ⟨ " ¬" p ≡ ! ¬p⟩ ¬"turn = 2 ! ¬turn = 2 ⟨ " ¬" p ⇒ ! ¬p⟩ ⇒ ⟨ turn = 1 ∨ turn = 2⟩ ! ¬turn !turn = 1= 2 ⇒ ⟨ turn = 1 ∨ turn = 2⟩ !turn = 1 p2 ∧ ¬! p8 ⇒ ⟨p9 p8⟩ p9 p2 ∧ ¬! p8 p5: p6: p7: p8: p9: p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis Proof of starvation-free p2 ∧ ¬! p8 ⇒ p3, p4 p2 ∧ ¬! p8 ⇒ p3, p4 p1: p2: p3: p4: p2 ∧ ¬! p8 ⇒ p2⟨ ∧ ¬! p8 p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ ¬"turn = 2 ⇒ ⟨ p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ ⟨ " ¬" p ≡ ! ¬p⟩ ¬"turn = 2 ! ¬turn = 2 ⟨ " ¬" p ⇒ ! ¬p⟩ ⇒ ⟨ turn = 1 ∨ turn = 2⟩ ! ¬turn !turn = 1= 2 ⇒ ⟨ turn = 1 ∨ turn = 2⟩ !turn = 1 p2 ∧ ¬! p8 ⇒ ⟨p9 p8⟩ p9 p2 ∧ ¬! p8 p5: p6: p7: p8: p9: p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis Proof of starvation-free p2 ∧ ¬! p8 ⇒ p3, p4 p2 ∧ ¬! p8 ⇒ p3, p4 p1: p2: p3: p4: p2 ∧ ¬! p8 ⇒ p2⟨ ∧ ¬! p8 p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ ¬"turn = 2 ⇒ ⟨ p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ ⟨ " ¬" p ≡ ! ¬p⟩ ¬"turn = 2 ! ¬turn = 2 ⟨ " ¬" p ⇒ ! ¬p⟩ ⇒ ⟨ turn = 1 ∨ turn = 2⟩ ! ¬turn !turn = 1= 2 ⇒ ⟨ turn = 1 ∨ turn = 2⟩ !turn = 1 p2 ∧ ¬! p8 ⇒ ⟨p9 p8⟩ p9 p2 ∧ ¬! p8 p5: p6: p7: p8: p9: p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis ⟨ " ¬" p ⇒ ! ¬p⟩ integer tur ! ¬turn = 2 Proof of starvation-free p ⇒ ⟨ turn = 1 ∨ turn = 2⟩ loop forever p1: non-critical section 1 p3, p4 p2 ∧!turn ¬! p8=⇒ p2: p3: p4: p2 ∧ ¬! p8 ⇒ p2⟨p9 ∧ ¬! p8 p8⟩ ⇒ p9 ⟨ p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ ⇒ ¬"turn ⟨ p92 ⟩ = ⟨ " ¬" p ⇒ ! ¬p⟩ ! ¬turn = 2 ⇒ ⟨ turn = 1 ∨ turn = 2⟩ p2 ∧ ¬! p8 ⇒ !turn = 1 !turn = 1 p2 ∧ ¬! p8 ⇒ ! "turn = 1 p2 ∧ ¬! p8 p p8 p5: p6: p7: p8: p9: p10: wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis ⟨ " ¬" p ⇒ ! ¬p⟩ integer tur ! ¬turn = 2 Proof of starvation-free p ⇒ ⟨ turn = 1 ∨ turn = 2⟩ loop forever p1: non-critical section 1 p3, p4 p2 ∧!turn ¬! p8=⇒ p2: p3: p4: p2 ∧ ¬! p8 ⇒ p2⟨p9 ∧ ¬! p8 p8⟩ ⇒ p9 ⟨ p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ ⇒ ¬"turn ⟨ p92 ⟩ = ⟨ " ¬" p ⇒ ! ¬p⟩ ! ¬turn = 2 ⇒ ⟨ turn = 1 ∨ turn = 2⟩ p2 ∧ ¬! p8 ⇒ !turn = 1 !turn = 1 p2 ∧ ¬! p8 ⇒ ! "turn = 1 p2 ∧ ¬! p8 p p8 p5: p6: p7: p8: p9: p10: wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis ⟨ " ¬" p ⇒ ! ¬p⟩ integer tur ! ¬turn = 2 Proof of starvation-free p ⇒ ⟨ turn = 1 ∨ turn = 2⟩ loop forever p1: non-critical section 1 p3, p4 p2 ∧!turn ¬! p8=⇒ p2: p3: p4: p2 ∧ ¬! p8 ⇒ p2⟨p9 ∧ ¬! p8 p8⟩ ⇒ p9 ⟨ p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ ⇒ ¬"turn ⟨ p92 ⟩ = ⟨ " ¬" p ⇒ ! ¬p⟩ ! ¬turn = 2 ⇒ ⟨ turn = 1 ∨ turn = 2⟩ p2 ∧ ¬! p8 ⇒ !turn = 1 !turn = 1 p2 ∧ ¬! p8 ⇒ ! "turn = 1 p2 ∧ ¬! p8 p p8 p5: p6: p7: p8: p9: p10: wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis ⟨ " ¬" p ⇒ ! ¬p⟩ integer tur ! ¬turn = 2 Proof of starvation-free p ⇒ ⟨ turn = 1 ∨ turn = 2⟩ loop forever p1: non-critical section 1 p3, p4 p2 ∧!turn ¬! p8=⇒ p2: p3: p4: p2 ∧ ¬! p8 ⇒ p2⟨p9 ∧ ¬! p8 p8⟩ ⇒ p9 ⟨ p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ ⇒ ¬"turn ⟨ p92 ⟩ = ⟨ " ¬" p ⇒ ! ¬p⟩ ! ¬turn = 2 ⇒ ⟨ turn = 1 ∨ turn = 2⟩ p2 ∧ ¬! p8 ⇒ !turn = 1 !turn = 1 p2 ∧ ¬! p8 ⇒ ! "turn = 1 p2 ∧ ¬! p8 p p8 p5: p6: p7: p8: p9: p10: wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis ⟨ " ¬" p ⇒ ! ¬p⟩ integer tur ! ¬turn = 2 Proof of starvation-free p ⇒ ⟨ turn = 1 ∨ turn = 2⟩ loop forever p1: non-critical section 1 p3, p4 p2 ∧!turn ¬! p8=⇒ p2: p3: p4: p2 ∧ ¬! p8 ⇒ p2⟨p9 ∧ ¬! p8 p8⟩ ⇒ p9 ⟨ p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ ⇒ ¬"turn ⟨ p92 ⟩ = ⟨ " ¬" p ⇒ ! ¬p⟩ ! ¬turn = 2 ⇒ ⟨ turn = 1 ∨ turn = 2⟩ p2 ∧ ¬! p8 ⇒ !turn = 1 !turn = 1 p2 ∧ ¬! p8 ⇒ ! "turn = 1 p2 ∧ ¬! p8 p p8 p5: p6: p7: p8: p9: p10: wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis ⇒ ⟨p9 p9 ⇒ ⟨ p8⟩ Proof of starvation-free p9 p2 ∧ ¬! p8 ⇒ p3, p4 ⟩ p1: p2: p3: p2 ∧ ¬! p8 ⇒ !turn = 1 p2 ∧ ¬! p8 ⇒ p2 ∧ ¬!!p8 "turn = 1 ⇒ ⟨ p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ p8 ¬"turn = 2 p ⟨ " p3, p4 turn¬" = 1p ⇒ ! ¬p⟩ ! ¬turn = 2 ⇒ ⟨ turn = 1 ∨ turn = 2⟩ !turn = 1 p2 ∧ ¬! p8 p4: p5: p6: p7: p8: p9: p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis ⇒ ⟨p9 p9 ⇒ ⟨ p8⟩ Proof of starvation-free p9 p2 ∧ ¬! p8 ⇒ p3, p4 ⟩ p1: p2: p3: p2 ∧ ¬! p8 ⇒ !turn = 1 p2 ∧ ¬! p8 ⇒ p2 ∧ ¬!!p8 "turn = 1 ⇒ ⟨ p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ p8 ¬"turn = 2 p ⟨ " p3, p4 turn¬" = 1p ⇒ ! ¬p⟩ ! ¬turn = 2 ⇒ ⟨ turn = 1 ∨ turn = 2⟩ !turn = 1 p2 ∧ ¬! p8 p4: p5: p6: p7: p8: p9: p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis ⇒ ⟨p9 p9 ⇒ ⟨ p8⟩ Proof of starvation-free p9 p2 ∧ ¬! p8 ⇒ p3, p4 ⟩ p1: p2: p3: p2 ∧ ¬! p8 ⇒ !turn = 1 p2 ∧ ¬! p8 ⇒ p2 ∧ ¬!!p8 "turn = 1 ⇒ ⟨ p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ p8 ¬"turn = 2 p ⟨ " p3, p4 turn¬" = 1p ⇒ ! ¬p⟩ ! ¬turn = 2 ⇒ ⟨ turn = 1 ∨ turn = 2⟩ !turn = 1 p2 ∧ ¬! p8 p4: p5: p6: p7: p8: p9: p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis ⇒ ⟨p9 p9 ⇒ ⟨ p8⟩ Proof of starvation-free p9 p2 ∧ ¬! p8 ⇒ p3, p4 ⟩ p1: p2: p3: p2 ∧ ¬! p8 ⇒ !turn = 1 p2 ∧ ¬! p8 ⇒ p2 ∧ ¬!!p8 "turn = 1 ⇒ ⟨ p2 ∧ ¬! p8 ⇒ ¬"turn = 2⟩ p8 ¬"turn = 2 p ⟨ " p3, p4 turn¬" = 1p ⇒ ! ¬p⟩ ! ¬turn = 2 ⇒ ⟨ turn = 1 ∨ turn = 2⟩ !turn = 1 p2 ∧ ¬! p8 p4: p5: p6: p7: p8: p9: p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis Proof of starvation-free p2 ∧ ¬! p8 ⇒ ¬"turn = 2 p1: p2: p3: "turn = 2 ⇒ ⟨ ⟩ ! " p6 ⇒ ⟨ p3..5 ∨ p8..10 ≡ want p⟩ ! " ¬want p ⇒ ⟨ ⟩ ! q9 ⇒ ⟨ ← ⟩ !turn = 1 "turn = 2 p4: p5: p6: p7: p8: p9: p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis Proof of starvation-free p2 ∧ ¬! p8 ⇒ ¬"turn = 2 p1: p2: p3: "turn = 2 ⇒ ⟨ ⟩ ! " p6 ⇒ ⟨ p3..5 ∨ p8..10 ≡ want p⟩ ! " ¬want p ⇒ ⟨ ⟩ ! q9 ⇒ ⟨ ← ⟩ !turn = 1 "turn = 2 p4: p5: p6: p7: p8: p9: p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis Proof of starvation-free p2 ∧ ¬! p8 ⇒ ¬"turn = 2 p1: p2: p3: "turn = 2 ⇒ ⟨ ⟩ ! " p6 ⇒ ⟨ p3..5 ∨ p8..10 ≡ want p⟩ ! " ¬want p ⇒ ⟨ ⟩ ! q9 ⇒ ⟨ ← ⟩ !turn = 1 "turn = 2 p4: p5: p6: p7: p8: p9: p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis Proof of starvation-free p2 ∧ ¬! p8 ⇒ ¬"turn = 2 p1: p2: p3: "turn = 2 ⇒ ⟨ ⟩ ! " p6 ⇒ ⟨ p3..5 ∨ p8..10 ≡ want p⟩ ! " ¬want p ⇒ ⟨ ⟩ ! q9 ⇒ ⟨ ← ⟩ !turn = 1 "turn = 2 p4: p5: p6: p7: p8: p9: p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis Proof of starvation-free p2 ∧ ¬! p8 ⇒ ¬"turn = 2 p1: p2: p3: "turn = 2 ⇒ ⟨ ⟩ ! " p6 ⇒ ⟨ p3..5 ∨ p8..10 ≡ want p⟩ ! " ¬want p ⇒ ⟨ ⟩ ! q9 ⇒ ⟨ ← ⟩ !turn = 1 "turn = 2 p4: p5: p6: p7: p8: p9: p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis Proof of starvation-free p2 ∧ ¬! p8 ⇒ ¬"turn = 2 p1: p2: p3: "turn = 2 ⇒ ⟨ ⟩ ! " p6 ⇒ ⟨ p3..5 ∨ p8..10 ≡ want p⟩ ! " ¬want p ⇒ ⟨ ⟩ ! q9 ⇒ ⟨ ← ⟩ !turn = 1 "turn = 2 p4: p5: p6: p7: p8: p9: p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis Proof of starvation-free p2 ∧ ¬! p8 ⇒ ¬"turn = 2 p1: p2: p3: "turn = 2 ⇒ ⟨ ⟩ ! " p6 ⇒ ⟨ p3..5 ∨ p8..10 ≡ want p⟩ ! " ¬want p ⇒ ⟨ ⟩ ! q9 ⇒ ⟨ ← ⟩ !turn = 1 "turn = 2 p4: p5: p6: p7: p8: p9: p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis Proof of starvation-free p2 ∧ ¬! p8 ⇒ ¬"turn = 2 p1: p2: p3: "turn = 2 ⇒ ⟨ ⟩ ! " p6 ⇒ ⟨ p3..5 ∨ p8..10 ≡ want p⟩ ! " ¬want p ⇒ ⟨ ⟩ ! q9 ⇒ ⟨ ← ⟩ !turn = 1 "turn = 2 p4: p5: p6: p7: p8: p9: p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis Proof of starvation-free p2 ∧ ¬! p8 ⇒ ¬"turn = 2 p1: p2: p3: "turn = 2 ⇒ ⟨ ⟩ ! " p6 ⇒ ⟨ p3..5 ∨ p8..10 ≡ want p⟩ ! " ¬want p ⇒ ⟨ ⟩ ! q9 ⇒ ⟨ ← ⟩ !turn = 1 "turn = 2 p4: p5: p6: p7: p8: p9: p10: integer tur p loop forever non-critical section wantp ¿ true while wantq if turn = 2 wantp ¿ false await turn = 1 wantp ¿ true critical section turn ¿ 2 wantp ¿ false M. Ben-Ari. Principles of Concurrent and Dis Proof integer turn ¿ 1 ofp starvation-free loop forever p1: non-critical section p2 ∧ ¬! p8 ⇒ ¬"turn = 2 p2: wantp ¿ true p3: while wantq p4: if turn = 2 "turn = 2 p5: wantp ¿ false ⇒ ⟨ ⟩ =1 p6: await turn p7: wantp ¿ true ! " p6 p8: critical≡section ⇒ ⟨ p3..5 ∨ p8..10 want p⟩ p9: turn ¿ 2 ! " ¬want pp10: wantp ¿ false q1: q2: q3: q4: q5: q6: q7: q8: q9: q10: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false ⇒ ⟨ ⟩ ! q9 ⇒ ⟨ ⟩ Principles of Concurrent and Distributed Programming, Second edition ≠c M. Ben-Ari 200 M. ← Ben-Ari. !turn = 1 "turn = 2 Proof integer turn ¿ 1 ofp starvation-free loop forever p1: non-critical section p2 ∧ ¬! p8 ⇒ ¬"turn = 2 p2: wantp ¿ true p3: while wantq p4: if turn = 2 "turn = 2 p5: wantp ¿ false ⇒ ⟨ ⟩ =1 p6: await turn p7: wantp ¿ true ! " p6 p8: critical≡section ⇒ ⟨ p3..5 ∨ p8..10 want p⟩ p9: turn ¿ 2 ! " ¬want pp10: wantp ¿ false q1: q2: q3: q4: q5: q6: q7: q8: q9: q10: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false ⇒ ⟨ ⟩ ! q9 ⇒ ⟨ ⟩ Principles of Concurrent and Distributed Programming, Second edition ≠c M. Ben-Ari 200 M. ← Ben-Ari. !turn = 1 "turn = 2 Proof integer turn ¿ 1 ofp starvation-free loop forever p1: non-critical section p2 ∧ ¬! p8 ⇒ ¬"turn = 2 p2: wantp ¿ true p3: while wantq p4: if turn = 2 "turn = 2 p5: wantp ¿ false ⇒ ⟨ ⟩ =1 p6: await turn p7: wantp ¿ true ! " p6 p8: critical≡section ⇒ ⟨ p3..5 ∨ p8..10 want p⟩ p9: turn ¿ 2 ! " ¬want pp10: wantp ¿ false q1: q2: q3: q4: q5: q6: q7: q8: q9: q10: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false ⇒ ⟨ ⟩ ! q9 ⇒ ⟨ ⟩ Principles of Concurrent and Distributed Programming, Second edition ≠c M. Ben-Ari 200 M. ← Ben-Ari. !turn = 1 "turn = 2 Proof integer turn ¿ 1 ofp starvation-free loop forever p1: non-critical section p2 ∧ ¬! p8 ⇒ ¬"turn = 2 p2: wantp ¿ true p3: while wantq p4: if turn = 2 "turn = 2 p5: wantp ¿ false ⇒ ⟨ ⟩ =1 p6: await turn p7: wantp ¿ true ! " p6 p8: critical≡section ⇒ ⟨ p3..5 ∨ p8..10 want p⟩ p9: turn ¿ 2 ! " ¬want pp10: wantp ¿ false q1: q2: q3: q4: q5: q6: q7: q8: q9: q10: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false ⇒ ⟨ ⟩ ! q9 ⇒ ⟨ ⟩ Principles of Concurrent and Distributed Programming, Second edition ≠c M. Ben-Ari 200 M. ← Ben-Ari. !turn = 1 "turn = 2 Proof integer turn ¿ 1 ofp starvation-free loop forever p1: non-critical section p2 ∧ ¬! p8 ⇒ ¬"turn = 2 p2: wantp ¿ true p3: while wantq p4: if turn = 2 "turn = 2 p5: wantp ¿ false ⇒ ⟨ ⟩ =1 p6: await turn p7: wantp ¿ true ! " p6 p8: critical≡section ⇒ ⟨ p3..5 ∨ p8..10 want p⟩ p9: turn ¿ 2 ! " ¬want pp10: wantp ¿ false q1: q2: q3: q4: q5: q6: q7: q8: q9: q10: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false ⇒ ⟨ ⟩ ! q9 ⇒ ⟨ ⟩ Principles of Concurrent and Distributed Programming, Second edition ≠c M. Ben-Ari 200 M. ← Ben-Ari. !turn = 1 "turn = 2 Proof integer turn ¿ 1 ofp starvation-free loop forever p1: non-critical section p2 ∧ ¬! p8 ⇒ ¬"turn = 2 p2: wantp ¿ true p3: while wantq p4: if turn = 2 "turn = 2 p5: wantp ¿ false ⇒ ⟨ ⟩ =1 p6: await turn p7: wantp ¿ true ! " p6 p8: critical≡section ⇒ ⟨ p3..5 ∨ p8..10 want p⟩ p9: turn ¿ 2 ! " ¬want pp10: wantp ¿ false q1: q2: q3: q4: q5: q6: q7: q8: q9: q10: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false ⇒ ⟨ ⟩ ! q9 ⇒ ⟨ ⟩ Principles of Concurrent and Distributed Programming, Second edition ≠c M. Ben-Ari 200 M. ← Ben-Ari. !turn = 1 "turn = 2 Proof integer turn ¿ 1 ofp starvation-free loop forever p1: non-critical section p2 ∧ ¬! p8 ⇒ ¬"turn = 2 p2: wantp ¿ true p3: while wantq p4: if turn = 2 "turn = 2 p5: wantp ¿ false ⇒ ⟨ ⟩ =1 p6: await turn p7: wantp ¿ true ! " p6 p8: critical≡section ⇒ ⟨ p3..5 ∨ p8..10 want p⟩ p9: turn ¿ 2 ! " ¬want pp10: wantp ¿ false q1: q2: q3: q4: q5: q6: q7: q8: q9: q10: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false ⇒ ⟨ ⟩ ! q9 ⇒ ⟨ ⟩ Principles of Concurrent and Distributed Programming, Second edition ≠c M. Ben-Ari 200 M. ← Ben-Ari. !turn = 1 "turn = 2 Proof integer turn ¿ 1 ofp starvation-free loop forever p1: non-critical section p2 ∧ ¬! p8 ⇒ ¬"turn = 2 p2: wantp ¿ true p3: while wantq p4: if turn = 2 "turn = 2 p5: wantp ¿ false ⇒ ⟨ ⟩ =1 p6: await turn p7: wantp ¿ true ! " p6 p8: critical≡section ⇒ ⟨ p3..5 ∨ p8..10 want p⟩ p9: turn ¿ 2 ! " ¬want pp10: wantp ¿ false q1: q2: q3: q4: q5: q6: q7: q8: q9: q10: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false ⇒ ⟨ ⟩ ! q9 ⇒ ⟨ ⟩ Principles of Concurrent and Distributed Programming, Second edition ≠c M. Ben-Ari 200 M. ← Ben-Ari. !turn = 1 "turn = 2 Proof integer turn ¿ 1 ofp starvation-free loop forever p1: non-critical section p2 ∧ ¬! p8 ⇒ ¬"turn = 2 p2: wantp ¿ true p3: while wantq p4: if turn = 2 "turn = 2 p5: wantp ¿ false ⇒ ⟨ ⟩ =1 p6: await turn p7: wantp ¿ true ! " p6 p8: critical≡section ⇒ ⟨ p3..5 ∨ p8..10 want p⟩ p9: turn ¿ 2 ! " ¬want pp10: wantp ¿ false q1: q2: q3: q4: q5: q6: q7: q8: q9: q10: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false ⇒ ⟨ ⟩ ! q9 ⇒ ⟨ ⟩ Principles of Concurrent and Distributed Programming, Second edition ≠c M. Ben-Ari 200 M. ← Ben-Ari. !turn = 1 "turn = 2 Proof integer turn ¿ 1 ofp starvation-free loop forever p1: non-critical section p2 ∧ ¬! p8 ⇒ ¬"turn = 2 p2: wantp ¿ true p3: while wantq p4: if turn = 2 "turn = 2 p5: wantp ¿ false ⇒ ⟨ ⟩ =1 p6: await turn p7: wantp ¿ true ! " p6 p8: critical≡section ⇒ ⟨ p3..5 ∨ p8..10 want p⟩ p9: turn ¿ 2 ! " ¬want pp10: wantp ¿ false q1: q2: q3: q4: q5: q6: q7: q8: q9: q10: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false ⇒ ⟨ ⟩ ! q9 ⇒ ⟨ ⟩ Principles of Concurrent and Distributed Programming, Second edition ≠c M. Ben-Ari 200 M. ← Ben-Ari. !turn = 1 "turn = 2 Proof integer turn ¿ 1 ofp starvation-free loop forever p1: non-critical section p2 ∧ ¬! p8 ⇒ ¬"turn = 2 p2: wantp ¿ true p3: while wantq p4: if turn = 2 "turn = 2 p5: wantp ¿ false ⇒ ⟨ ⟩ =1 p6: await turn p7: wantp ¿ true ! " p6 p8: critical≡section ⇒ ⟨ p3..5 ∨ p8..10 want p⟩ p9: turn ¿ 2 ! " ¬want pp10: wantp ¿ false q1: q2: q3: q4: q5: q6: q7: q8: q9: q10: q loop forever non-critical section wantq ¿ true while wantp if turn = 1 wantq ¿ false await turn = 2 wantq ¿ true critical section turn ¿ 1 wantq ¿ false ⇒ ⟨ ⟩ ! q9 ⇒ ⟨ ⟩ Principles of Concurrent and Distributed Programming, Second edition ≠c M. Ben-Ari 200 M. ← Ben-Ari. !turn = 1 "turn = 2
Similar documents
EDD-WEDA Board Meeting Agenda
Residents MUST complete a registration card and provide their name and address. The Board requests that comments be limited to three (3) minutes. The Texas Open Meetings Act provides the following:...
More information