Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Dan Frumin
iris-coq
Commits
a7d741f6
Commit
a7d741f6
authored
Sep 07, 2016
by
Robbert Krebbers
Browse files
More consistent names in ticket lock.
parent
e8b99bd7
Changes
1
Hide whitespace changes
Inline
Side-by-side
heap_lang/lib/ticket_lock.v
View file @
a7d741f6
...
...
@@ -7,23 +7,23 @@ From iris.heap_lang.lib Require Export lock.
Import
uPred
.
Definition
wait_loop
:
val
:=
rec:
"wait_loop"
"x"
"l
oc
k"
:=
let:
"o"
:=
!
(
Fst
"l
oc
k"
)
in
rec:
"wait_loop"
"x"
"lk"
:=
let:
"o"
:=
!
(
Fst
"lk"
)
in
if:
"x"
=
"o"
then
#()
(
*
my
turn
*
)
else
"wait_loop"
"x"
"l
oc
k"
.
else
"wait_loop"
"x"
"lk"
.
Definition
newlock
:
val
:=
λ
:
<>
,
((
*
owner
*
)
ref
#
0
,
(
*
next
*
)
ref
#
0
).
Definition
acquire
:
val
:=
rec:
"acquire"
"l
oc
k"
:=
let:
"n"
:=
!
(
Snd
"l
oc
k"
)
in
if:
CAS
(
Snd
"l
oc
k"
)
"n"
(
"n"
+
#
1
)
then
wait_loop
"n"
"l
oc
k"
else
"acquire"
"l
oc
k"
.
rec:
"acquire"
"lk"
:=
let:
"n"
:=
!
(
Snd
"lk"
)
in
if:
CAS
(
Snd
"lk"
)
"n"
(
"n"
+
#
1
)
then
wait_loop
"n"
"lk"
else
"acquire"
"lk"
.
Definition
release
:
val
:=
λ
:
"l
oc
k"
,
(
Fst
"l
oc
k"
)
<-
!
(
Fst
"l
oc
k"
)
+
#
1.
Definition
release
:
val
:=
λ
:
"lk"
,
(
Fst
"lk"
)
<-
!
(
Fst
"lk"
)
+
#
1.
Global
Opaque
newlock
acquire
release
wait_loop
.
...
...
@@ -58,14 +58,14 @@ Section proof.
Definition
locked
(
γ
:
gname
)
:
iProp
Σ
:=
(
∃
o
,
own
γ
(
◯
(
Excl
'
o
,
∅
)))
%
I
.
Global
Instance
lock_inv_ne
n
γ
s
lo
ln
:
Proper
(
dist
n
==>
dist
n
)
(
lock_inv
γ
s
lo
ln
).
Global
Instance
lock_inv_ne
n
γ
lo
ln
:
Proper
(
dist
n
==>
dist
n
)
(
lock_inv
γ
lo
ln
).
Proof
.
solve_proper
.
Qed
.
Global
Instance
is_lock_ne
γ
s
n
l
:
Proper
(
dist
n
==>
dist
n
)
(
is_lock
γ
s
l
).
Global
Instance
is_lock_ne
γ
n
l
k
:
Proper
(
dist
n
==>
dist
n
)
(
is_lock
γ
l
k
).
Proof
.
solve_proper
.
Qed
.
Global
Instance
is_lock_persistent
γ
s
l
R
:
PersistentP
(
is_lock
γ
s
l
R
).
Global
Instance
is_lock_persistent
γ
l
k
R
:
PersistentP
(
is_lock
γ
l
k
R
).
Proof
.
apply
_.
Qed
.
Global
Instance
locked_timeless
γ
s
:
TimelessP
(
locked
γ
s
).
Global
Instance
locked_timeless
γ
:
TimelessP
(
locked
γ
).
Proof
.
apply
_.
Qed
.
Lemma
locked_exclusive
(
γ
:
gname
)
:
(
locked
γ
★
locked
γ
⊢
False
)
%
I
.
...
...
@@ -88,8 +88,8 @@ Section proof.
iVsIntro
.
iApply
(
"HΦ"
$
!
(#
lo
,
#
ln
)
%
V
γ
).
iExists
lo
,
ln
.
eauto
.
Qed
.
Lemma
wait_loop_spec
γ
l
x
R
(
Φ
:
val
→
iProp
Σ
)
:
issued
γ
l
x
R
★
(
locked
γ
-
★
R
-
★
Φ
#())
⊢
WP
wait_loop
#
x
l
{{
Φ
}}
.
Lemma
wait_loop_spec
γ
l
k
x
R
(
Φ
:
val
→
iProp
Σ
)
:
issued
γ
l
k
x
R
★
(
locked
γ
-
★
R
-
★
Φ
#())
⊢
WP
wait_loop
#
x
l
k
{{
Φ
}}
.
Proof
.
iIntros
"[Hl HΦ]"
.
iDestruct
"Hl"
as
(
lo
ln
)
"(% & #? & % & #? & Ht)"
.
iL
ö
b
as
"IH"
.
wp_rec
.
subst
.
wp_let
.
wp_proj
.
wp_bind
(
!
_
)
%
E
.
...
...
@@ -110,8 +110,8 @@ Section proof.
wp_if
.
iApply
(
"IH"
with
"Ht"
).
by
iExact
"HΦ"
.
Qed
.
Lemma
acquire_spec
γ
l
R
(
Φ
:
val
→
iProp
Σ
)
:
is_lock
γ
l
R
★
(
locked
γ
-
★
R
-
★
Φ
#())
⊢
WP
acquire
l
{{
Φ
}}
.
Lemma
acquire_spec
γ
l
k
R
(
Φ
:
val
→
iProp
Σ
)
:
is_lock
γ
l
k
R
★
(
locked
γ
-
★
R
-
★
Φ
#())
⊢
WP
acquire
l
k
{{
Φ
}}
.
Proof
.
iIntros
"[Hl HΦ]"
.
iDestruct
"Hl"
as
(
lo
ln
)
"(% & #? & % & #?)"
.
iL
ö
b
as
"IH"
.
wp_rec
.
wp_bind
(
!
_
)
%
E
.
subst
.
wp_proj
.
...
...
@@ -142,8 +142,8 @@ Section proof.
iVsIntro
.
wp_if
.
by
iApply
"IH"
.
Qed
.
Lemma
release_spec
γ
l
R
(
Φ
:
val
→
iProp
Σ
)
:
is_lock
γ
l
R
★
locked
γ
★
R
★
Φ
#()
⊢
WP
release
l
{{
Φ
}}
.
Lemma
release_spec
γ
l
k
R
(
Φ
:
val
→
iProp
Σ
)
:
is_lock
γ
l
k
R
★
locked
γ
★
R
★
Φ
#()
⊢
WP
release
l
k
{{
Φ
}}
.
Proof
.
iIntros
"(Hl & Hγ & HR & HΦ)"
.
iDestruct
"Hl"
as
(
lo
ln
)
"(% & #? & % & #?)"
;
subst
.
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment