Solutions to a value recycling problem that we define herein facilitate
implementations of computer programs that may execute as multithreaded
computations in multiprocessor computers, as well as implementations of
related shared data structures. Some exploitations of the techniques
described herein allow non-blocking, shared data structures to be
implemented using standard dynamic allocation mechanisms (such as malloc
and free). Indeed, we present several exemplary realizations of
dynamic-sized, non-blocking shared data structures that are not prevented
from future memory reclamation by thread failures and which depend (in
some implementations) only on widely-available hardware support for
synchronization. Some exploitations of the techniques described herein
allow non-blocking, indeed even lock-free or wait-free, implementations
of dynamic storage allocation for shared data structures. A class of
general solutions to value recycling is described in the context of an
illustration we call the Repeat Offender Problem (ROP), including
illustrative Application Program Interfaces (APIs) defined in terms of
the ROP terminology. Furthermore, specific solutions, implementations and
algorithm, including a Pass-The-Buck (PTB) implementation are described.