  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 (a.k.a. durable or
recoverable) 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. Specifically, we
introduce a detectable FC-based implementation of a concurrent LIFO stack
object. Our empirical evaluation establishes that thanks to the usage of flat
combining, the novel stack algorithm requires a much smaller number of costly
persistence instructions than competing algorithms and is therefore able to
significantly outperform them.
