Is Parallel Programming Hard, And, If So, What Can You Do About It? by Paul E. McKenney (2017) is a comprehensive free PDF book available from http://kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.html. It discusses the low-level parallel techniques from the Linux and C-language angles, including atomics, mutexes, and read-copy-update (RCU) synchronization.
What really happened on Mars by Glenn E. Reeves (1997) is a short write-up available at https://cs.unc.edu/~anderson/teach/comp790/papers/mars_pathfinder_long_version.html and is a description of a real-life case of priority inversion in the Mars Pathfinder's software.
C++ Concurrency in Action by Anthony Williams Manning (2012) is a detailed guide to C++11's concurrency and multithreading support. It discusses language level constructs such as C++ memory model, memory orderings, and...