  We study the performance power of software combining in designing persistent
algorithms and data structures. We present Bcomb, a new blocking
highly-efficient combining protocol, and built upon it to get PBcomb, a
persistent version of it that performs a small number of persistence
instructions and exhibits low synchronization cost. We built fundamental
recoverable data structures, such as stacks and queues based on PBcomb, as well
as on PWFcomb, a wait-free universal construction we present. Our experiments
show that PBcomb and PWFcomb outperform by far state-of-the-art recoverable
universal constructions and transactional memory systems, many of which ensure
weaker consistency properties than our algorithms. We built recoverable queues
and stacks, based on PBcomb and PWFcomb, and present experiments to show that
they have much better performance than previous recoverable implementations of
stacks and queues. We build the first recoverable implementation of a
concurrent heap and present experiments to show that it has good performance
when the size of the heap is not very large.
