  Recoverable algorithms tolerate failures and recoveries of processes by using
non-volatile memory. Of particular interest are self-implementations of key
operations, in which a recoverable operation is implemented from its
non-recoverable counterpart (in addition to reads and writes). This paper
presents two self-implementations of the SWAP operation. One works in the
system-wide failures model, where all processes fail and recover together, and
the other in the independent failures model, where each process crashes and
recovers independently of the other processes. Both algorithms are wait-free in
crash-free executions, but their recovery code is blocking. We prove that this
is inherent for the independent failures model. The impossibility result is
proved for implementations of distinguishable operations using interfering
functions, and in particular, it applies to a recoverable self-implementation
of swap.
