What Every Programmer Should Know About Memory
What Every Dev Must Know About Multithreaded Apps
The “Double-Checked Locking is Broken” Declaration
http://en.wikipedia.org/wiki/Memory_barrier
http://en.wikipedia.org/wiki/Volatile_variable
Benign data races: what could possibly go wrong?
How to miscompile programs with “benign” data races
Chrome C++ Lock and ConditionVariable
https://en.wikipedia.org/wiki/Double-checked_locking
Finding races and memory errors with compiler instrumentation.
http://www.valgrind.org/
http://www.valgrind.org/docs/manual/tech-docs.html
http://www.valgrind.org/docs/pubs.html
The design and implementation of Valgrind
https://courses.cs.washington.edu/courses/cse326/05wi/valgrind-doc/mc_techdocs.html
http://valgrind.org/docs/manual/mc-tech-docs.html#mc-tech-docs.intro
Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation
http://valgrind.org/docs/valgrind2007.pdf
WatchdogLite: Hardware-Accelerated Compiler-Based Pointer Checking
https://github.com/google/sanitizers/wiki/ThreadSanitizerAlgorithm
llvm-compiler-rt