Raymond Mutual Exclusion
Actions <Upon request> Request.(h.j) = Request.(h.j) {j} h.j = k /\ h.k = k /\ j Request.k h.k = j, h.j = j, Request.k = Request.k – {j}
Actions h.j = j Access critical section
Slight modification h.j = k /\ h.k = k /\ j Request.k /\ (P.j = k \/ P.k = j) h.k = j, h.j = j, Request.k = Request.k – {j}
Fault-Tolerant Mutual Exclusion What happens if the tree is broken due to faults? A tree correction algorithm could be used to fix the tree Example: we considered one such algorithm before
However, Even if the tree is fixed, the holder relation may not be accurate
Invariant for holder relation What are the conditions that are always true about holder relation?
Invariant h.j {j, P.j} ch.j P.j j (h.j = P.j \/ h.(P.j) = j) Plus all the predicates in the invariant of the tree program
Recovery from faults h.j {j, P.j} ch.j h.j = P.j
Recovery from faults P.j j /\ (h.j = P.j \/ h.(P.j) = j)
Recovery from Faults P.j j /\ (h.j = P.j /\ h.(P.j) = j) h.(P.j) = P.(P.j)
Notion of Superposition