We have considered how an operation that is invoked on a data object as part of a concurrent system may be guaranteed to occur without interference from other concurrent actions. A number of methods of implementing this are available. They fall into two basic categories depending on whether the potentially interfering processes access data objects in shared memory. This formed the basis of Chapters 9 to 14. At this stage we had not considered the possibility that a system might crash at any time, causing main memory to be lost. Chapter 15 introduced crash resilience for a single system for a single operation invocation.