C++ and the Perils of Double-Checked Locking