Merge pull request #2420 from RosettaCommons/vmullig/threadsafe_tracers
Grab-bag of thread safety fixes
See issue #2419 -- this started as an attempt to fix the tracer thread-safety issue. Note that this pull request was branched off of pull request #2416, and must be merged after that one.
Also:
- [x] Ensuring that all tracers are `THREAD_LOCAL`.
- [x] The CarbohydrateInfoManager is not threadsafe -- it lazily loads data in a non-threadsafe manner. This pull request will fix that.
- [x] The same is true for the initialization of some global data related to VariantType names, also fixed here.
- [x] Some instances of `std::recursive_mutex` have been switched to `std::mutex`. From what I've read, `std::recursive_mutex` should be avoided, because it encourages sloppiness. (A developer can get away with not knowing the scope over which a mutex is locked, which, at best, can lead to inefficient code with objects locked for way too long, and, at worst, can lead to very difficult-to-diagnose bugs. Misusing a `std::mutex` by trying to lock it repeatedly, on the other hand, leads to unambiguous deadlock, which is easier to diagnose.)
- [x] Making the `been_accessed_` `bool` in `utility::options::Option` into a `std::atomic_bool` in compilations with `MULTI_THREADED` defined. (Issue identified by Helgrind).
TODO:
- [x] Run unit tests for cxx11thread build.
- [x] Check integration tests for cxx11thread build.
- [x] Check scoring tests for cxx11thread build.
- FACTS test fails, as expected. (The FACTS global data cache pose-specific information, and are not threadsafe). All other tests pass.
- [x] Beauty