+class PerThreadPool;
+
+/** Management of a per-thread pool of data that is allocated by one thread and
+ * freed by one other thread. Not safe for use when there is more than 1
+ * reader and 1 writer.
+ *
+ * This is basically a wrapper around a thread-local storage instance of a
+ * ringbuffer, made safe for use in the case where multiple threads allocate
+ * from the ringbuffer and a single thread "frees" the allocations.
+ *
+ * Rather than using locks, each thread has its own ringbuffer (and associated
+ * data), and so it calls alloc(), passes a pointer to the result of the alloc
+ * to another thread, which later calls push() to "free" it.
+ */