Readers?Writers Problem 4
Modifikácia usera
declare t: int, b: boolean
always t = N ? (nr + N.nw)
initially b = false
assign
nr := nr + 1 if t ? 1 ? ?b {started read}
nr := nr ? 1 {end read}
nw, nq, b := nw + 1, nq ? 1, false
if t ? N ? nq > 0 {started write}
nw := nw ? 1 {end write}
b := nq > 0 {set b}
Dôkaz (5), cize nq > 0 ? nw = 1 plynie z (4) a (6)?(9):
b ? nq > 0 (6)
nq > 0 ensures nw = 1 ? b (7)
b ? nr = 0 ensures nw = 1 (8)
b ? nr = k ? k > 0 unless b ? nr < k (9)
(uz sme neformálne urobili predtým)
chceme ukázat, ze nq > 0 ? nw = 1:
b ? nr = k ? k > 0 ? b ? nr < k (PSP 4, 9)
tranzitivita s (8) a (10): b ? nw = 1 (11)
kombináciou (7) a (11) dostávame výsledok.