  Recent advances in non-volatile main memory (NVRAM) technology have spurred
research on designing algorithms that are resilient to process crashes. This
paper is a fuller version of our conference paper \cite{jayanti:rmeabort},
which presents the first Recoverable Mutual Exclusion (RME) algorithm that
supports abortability. Our algorithm uses only the read, write, and CAS
operations, which are commonly supported by multiprocessors. It satisfies FCFS
and other standard properties.
  Our algorithm is also adaptive. On DSM and Relaxed-CC multiprocessors, a
process incurs $O(\min(k, \log n))$ RMRs in a passage and $O(f+ \min(k, \log
n))$ RMRs in an attempt, where $n$ is the number of processes that the
algorithm is designed for, $k$ is the point contention of the passage or the
attempt, and $f$ is the number of times that $p$ crashes during the attempt. On
a Strict CC multiprocessor, the passage and attempt complexities are $O(n)$ and
$O(f+n)$.
  Attiya et al. proved that, with any mutual exclusion algorithm, a process
incurs at least $\Omega(\log n)$ RMRs in a passage, if the algorithm uses only
the read, write, and CAS operations \cite{Attiya:lbound}. This lower bound
implies that the worst-case RMR complexity of our algorithm is optimal for the
DSM and Relaxed CC multiprocessors.
