Generic Locking in C++ - Andrei Alexandrescu