  Flat combining (FC) is a synchronization paradigm in which a single thread,
holding a global lock, collects requests by multiple threads for accessing a
concurrent data structure and applies their combined requests to it. Although
FC is sequential, it significantly reduces synchronization overheads and cache
invalidations and thus often provides better performance than that of lock-free
implementations. The recent emergence of non-volatile memory (NVM) technologies
increases the interest in the development of persistent concurrent objects.
These are objects that are able to recover from system failures and ensure
consistency by retaining their state in NVM and fixing it, if required, upon
recovery. Of particular interest are detectable objects that, in addition to
ensuring consistency, allow recovery code to infer if a failed operation took
effect before the crash and, if it did, obtain its response. In this work, we
present the first FC-based persistent object implementations. Specifically, we
introduce a detectable FC-based implementation of a concurrent LIFO stack, a
concurrent FIFO queue, and a double-ended queue. Our empirical evaluation
establishes that due to flat combining, the novel implementations require a
much smaller number of costly persistence instructions than competing
algorithms and are therefore able to significantly outperform them.
