runtime (ie, when logging).
The implementation is cludgy. This is because we create threads before main,
as a result of global thread objects (as opposed to pointers to thread objects
that get new'ed and started in main).
A view of the system through strace indicates one or two calls to gettid() per
thread (usually 1, occasionally 2). Changing the read lock in Log() to a write
lock deadlocks.