diff --git a/Concurrent Systems/notes/8 - Enhancing Liveness Properties.md b/Concurrent Systems/notes/8 - Enhancing Liveness Properties.md index d3a8f73..abd81b2 100644 --- a/Concurrent Systems/notes/8 - Enhancing Liveness Properties.md +++ b/Concurrent Systems/notes/8 - Enhancing Liveness Properties.md @@ -8,4 +8,24 @@ Can we take the most basic protocol that satisfies the most basic liveness prope **Why is it different from lock/unlock?** Because this allows failures, and they can also happen in the contention-free period. -PROBLEM: to distinguish a failure from a long delay, we need objects called ***failure detectors***, that provide processes information on the failed processes of the system. According to the type/quality of the info, several F. \ No newline at end of file +**PROBLEM:** to distinguish a failure from a long delay, we need objects called ***failure detectors***, that provide processes information on the failed processes of the system. According to the type/quality of the info, several F.D.s can be defined. + +**Eventually restricted leadership:** given a non-empty set of process IDs X, the failure detector $\Omega_{X}$ provides each process a local variable `ev_leader(X)` such that: +1. *(Validity)* `ev_leader(x)` always contains a process ID +2. *(Eventual leadership)* eventually, all `ev_leader(X)` of all non-crashed processes of X for ever contain the same process ID, that is one of them + +REMARK: the moment in which all variables contain the same leader is unknown + +``` +REMARK: the moment in which all variables contain the same leader is unknown + +need_help(i) := + NEED_HELP[i] <- true + repeat + X <- {j : NEED_HELP[j]} + until ev_leader(X) = i + +stop_help(i) := + NEED_HELP[i] <- false +``` +