SLIDE 1
strt r r r - - PowerPoint PPT Presentation
strt r r r - - PowerPoint PPT Presentation
strt r r r r strt r v .acq() i address v .rel() 1 i n i
SLIDE 2
SLIDE 3
❙❡r✈✐❝❡ DistLockService(ADDR) ✕ ✶
▼❛✐♥ ✐❝ {ADDR ♥♦t ❡♠♣t② }
eating ← null
✴✴ ✉s❡r ✇✐t❤ ❧♦❝❦ ✐❢ ♥♦t ♥✉❧❧
usersj ← []
✴✴ ✉s❡rs ❛t ❛❞❞r j
vj ← sid()
✴✴ s✐❞ ♦❢ ❛❝❝❡ss s②st❡♠ ❛t j r❡t✉r♥ {vj} ✴✴ ♠❛♣ ♦❢ s✐❞s ❛t♦♠✐❝✐t② ❛ss✉♠♣t✐♦♥✿ ✐♥♣✉t ❛♥❞ ♦✉t♣✉t ♣❛rts ♣r♦❣r❡ss ❛ss✉♠♣t✐♦♥s
thread u in vj.rel
❧❡❛❞s✲t♦
not u in vj.rel (eating = null
❧❡❛❞s✲t♦
eating = null) ⇒ (u in usersj
❧❡❛❞s✲t♦
u = eating)
SLIDE 4
❙❡r✈✐❝❡ DistLockService(ADDR) ✕ ✷
v[j].acq()
✐❝ {eating = mytid} ❛❞❞ mytid t♦ usersj ♦❝ {eating = null}
eating ← mytid
✐♥♣✉t v[j].rel() ✐❝ {eating = mytid
and mytid in usersj}
✴✴ ❝❛❧❧❡r ❛❝q✉✐r❡❞ ❧♦❝❦ ❛t j r❡♠♦✈❡ mytid ❢r♦♠ usersj ♦❝ {true}
SLIDE 5
■♥✈❡rs❡ ♦❢ ❞✐str✐❜✉t❡❞ ❧♦❝❦ s❡r✈✐❝❡
DistLockServiceInverse(ADDR, v)
♠❛✐♥✿ ... vj ... ♦✉t♣✉t doAcq(j) ✐♥♣✉t vj.acq() ✐❝ ♦❝ {...}
... vj.acq()
♦❝ ✐❝ {...}
...
♦✉t♣✉t doRel(j) ✐♥♣✉t vj.rel() ✐❝ ♦❝ {...}
... vj.rel()
♦❝ ✐❝ {...}
...
❛t♦♠✐❝✐t② ❛ss✉♠♣t✐♦♥✿ ... ♣r♦❣r❡ss ❛ss✉♠♣t✐♦♥ ❝♦♥❞✐t✐♦♥ {...}
SLIDE 6