Starling:** simpler*concurrency*proofs*
Ma#$Windsor(1),$ Mike$Dodds(1),$$$$$$$Ma#hew$Parkinson(2)$
(1) University$of$York$$$$$$$$$$$$$$$$$$$$$$$$$(2)$Microso>$Research$
Starling:** simpler*concurrency*proofs* Ma#$Windsor (1),$ Mike$Dodds - - PowerPoint PPT Presentation
Starling:** simpler*concurrency*proofs* Ma#$Windsor (1),$ Mike$Dodds (1) ,$$$$$$$Ma#hew$Parkinson (2)$ (1) University$of$York$$$$$$$$$$$$$$$$$$$$$$$$$(2)$Microso>$Research$ Sturnus'vulgaris' (common$starling)$ Ticketed*Lock
(1) University$of$York$$$$$$$$$$$$$$$$$$$$$$$$$(2)$Microso>$Research$
global&int&ticket;&&//&The&next&ticket&to&hand&out.& global&int&serving;&//&The¤t&ticket&holding&the&lock.& & method&lock()&{& &&<t&=&ticket++>;& &&do&{& &&&&<s&=&serving>;& &&}&while&(s&!=&t);& }& & method&unlock()&{& &&<serving++>;& }$
method&lock()&{& &&{|&emp&|}& &&<t&=&ticket++>;& &&do&{& &&&&<s&=&serving>;& &&}&while&(s&!=&t);& &&{|&holdLock()&|}& }& & method&unlock()&{& &&{|&holdLock()&|}& &&<serving++>;& &&{|&emp&|}& }$ constraint&holdLock()&&&*&holdLock()&&&G>&false;&
method&lock()&{& &&{|&emp&|}& &&<t&=&ticket++>;& &&{|&holdTick(t)&|}! &&do&{& &&&&{|&holdTick(t)&|}& &&&&<s&=&serving>;& &&&&{|&if&s==t&then&holdLock()&else&holdTick(t)&|}& &&}&while&(s&!=&t);& &&{|&holdLock()&|}& }& & method&unlock()&{& &&{|&holdLock()&|}& &&<serving++>;& &&{|&emp&|}& }$ constraint&holdLock()&&&*&holdLock()&&&G>&false;& & constraint&emp&&&&&&&&&&&&&&&&&&&&&&&&&G>&ticket&>=&serving;& constraint&holdTick(t)&&&&&&&&&&&&&&&&&G>&ticket&>&t;& constraint&holdLock()&&&&&&&&&&&&&&&&&&G>&ticket&!=&serving;& constraint&holdLock()&&&*&holdTick(t)&&G>&serving&!=&t;& constraint&holdTick(ta)&*&holdTick(tb)&G>&ta&!=&tb;&
method&lock()&{& &&{|&emp&|}& &&<t&=&ticket++>;& &&{|&holdTick(t)&|}! &&do&{& &&&&{|&holdTick(t)&|}& &&&&<s&=&serving>;& &&&&{|&if&s==t&then&holdLock()&else&holdTick(t)&|}& &&}&while&(s&!=&t);& &&{|&holdLock()&|}& }& & method&unlock()&{& &&{|&holdLock()&|}& &&<serving++>;& &&{|&emp&|}& }$
method&lock()&{& &&{|&emp&|}& &&<t&=&ticket++>;& &&{|&holdTick(t)&|}! &&do&{& &&&&{|&holdTick(t)&|}& &&&&<s&=&serving>;& &&&&{|&if&s==t&then&holdLock()&else&holdTick(t)&|}& &&}&while&(s&!=&t);& &&{|&holdLock()&|}& }& & method&unlock()&{& &&{|&holdLock()&|}& &&<serving++>;& &&{|&emp&|}& }$
U&{&holdLock(),&&holdLock()*holdLock(),&...}&&$ U&{&holdLock()*holdTick(1),&&holdLock()*holdTick(2),&&...}&& U&{&emp&}&&$
method&lock()&{& &&{|&emp&|}& &&<t&=&ticket++>;& &&{|&holdTick(t)&|}! &&do&{& &&&&{|&holdTick(t)&|}& &&&&<s&=&serving>;& &&&&{|&if&s==t&then&holdLock()&else&holdTick(t)&|}& &&}&while&(s&!=&t);& &&{|&holdLock()&|}& }& & method&unlock()&{& &&{|&holdLock()&|}& &&<serving++>;& &&{|&emp&|}& }$
$ {|&holdLock()&|}&<serving++>&{|&emp&|},&&
{|&holdTick(t)&|}&<s&=&serving>&{|&if&s==t&then&holdLock()&else&holdTick(t)&|},&&
...}&
method&lock()&{& &&{|&emp&|}& &&<t&=&ticket++>;& &&{|&holdTick(t)&|}! &&do&{& &&&&{|&holdTick(t)&|}& &&&&<s&=&serving>;& &&&&{|&if&s==t&then&holdLock()&else&holdTick(t)&|}& &&}&while&(s&!=&t);& &&{|&holdLock()&|}& }& & method&unlock()&{& &&{|&holdLock()&|}& &&<serving++>;& &&{|&emp&|}& }$
ReificaGon$=$$ constraint&holdLock()&&&*&holdLock()&&&G>&false;&
constraint&emp&&&&&&&&&&&&&&&&&&&&&&&&&G>&ticket&>=&serving;& constraint&holdTick(t)&&&&&&&&&&&&&&&&&G>&ticket&>&t;& constraint&holdLock()&&&&&&&&&&&&&&&&&&G>&ticket&!=&serving;& constraint&holdLock()&&&*&holdTick(t)&&G>&serving&!=&t;& constraint&holdTick(ta)&*&holdTick(tb)&G>&ta&!=&tb;&
Eg.&& holdLock()&*&holdTick(1)&*&holdTick(2)&*&holdTick(3)&*&holdTick(4)& *&holdTick(5)&*&holdTick(6)&*&holdTick(7)&*&holdTick(8)&*& holdTick(9)&*&holdTick(10)&*&holdTick(11)&*&holdTick(12)&*&...$ $ $ $
constraint&holdLock()&*&holdLock()&&&G>&&&false;$
Axiom:$$ {|&emp&|}&<t&=&ticket++>&{|&holdTick(t)&|}$ Defining$view:$$ holdLock()$ Proof$obligaGon:$$
Jt = ticket + +Kbemp ⇤ (holdLock() \m holdTick(t))c ✓ D(holdLock())
Jt = ticket + +Kbemp ⇤ holdLock()c ✓ D(holdLock()) Jt = ticket + +K(ticket serving) ✓ ticket 6= serving
needed$to$verify$heap$programs.$ $
Starling$is$to$be$used$for$find/fix$loop.$ $$
end$for$other$verificaGon$tools?$$
Follow$Starling$on$GitHub:$ $h#p://github.com/septract/starlingTtool/$