
A common failure scenario is when all processes in the system fail together (e.g., when machine experiences a power outage). This failure scenario is referred to as a system-wide failure. In this chapter, we describe an RME algorithm that is specifically designed for this category of failures, and achieves $${O}\left( 1\right) $$ RMR complexity in both the CC and DSM models. The algorithm relies crucially on a failure detector to synchronize recovering processes.
The mutual exclusion problem has been investigated under a variety of modeling assumptions ever since the problem was first introduced by Dijkstra in his seminal work several decades ago. Recent research on this topic emphasizes so-called local spin algorithms, which incur a bounded number of remote memory references (RMRs) per passage. Recoverable mutual exclusion (RME) creates new scope for the study of such algorithms by challenging the traditional assumption that processes competing for the critical section are either reliable or fail in a tightly controlled manner. RME can be viewed as a theoretical take on the practical problem of implementing fault-tolerant locks, which was previously considered in a handful of practitioner-oriented publications.
In this chapter, we describe a tight lower bound on the RMR complexity of an RME algorithm when, in addition to read, write and comparison-based primitives, processes can also use certain non-comparison-based primitives such as fetch-and-increment and fetch-and-store.
Many RME algorithms use read-modify-primitives to achieve lower RMR complexity. However, load and store instructions are the most broadly supported across different architectures. In this chapter, we describe RME algorithms that only use reads and writes, thereby making them more portable.