In my experience dynamic checkers like https://clang.llvm.org/docs/ThreadSanitizer.html tend to work better that static checks.
Having recently done some coding in Swift to implement a little toy Hypervisor, I sorely missed these annotations. By and large the errors they catch are ones I'd be embarrassed to have pointed out in a code review; I don't mind nearly so much when the compiler catches me without my mutex locked.
[1] shameless plug: https://github.com/duneroadrunner/SaferCPlusPlus#asynchronou...