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

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