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
Simon Spies
Iris
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
Markdown
is supported
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