A simple implementation of thread pooling for C/C++ using POSIX threads. Each pool has a designated worker function, and expects to be given a number of work items. Any thread in the pool can take a work item, and will pass the work item to the pool's worker function. The work items are void *, and are passed to the worker function exactly as they are given to pool_enqueue. The return values of the worker functions are ignored.