General
Let’s start with a few very general best practices that apply to atomics and threads.
Code Reviews
Code reviews should be part of each professional software development process. This holds especially true when you deal with concurrency. Concurrency is inherently complicated and requires a lot of thoughtful analysis and experience.
To make the review most effective, send the code you want to discuss to the reviewers before the review. Explicitly state which invariants should apply to your code. The reviewers should have enough time to analyse the code before the official review starts.
Not convinced? Let me give you an example. Do you remember the data races in the program readerWriterLock.cpp
in the chapter std::shared_lock
?