sanitizer_common: add new mutex
We currently have 3 different mutexes: - RWMutex - BlockingMutex - __tsan::Mutex RWMutex and __tsan::Mutex are roughly the same, except that tsan version supports deadlock detection. BlockingMutex degrades better under heavy contention from lots of threads (blocks in OS), but much slower for light contention and has non-portable performance and has larger static size and is not reader-writer. Add a new mutex that combines all advantages of these mutexes: it's reader-writer, has fast non-contended path, supports blocking to gracefully degrade under higher contention, has portable size/performance. For now it's named Mutex2 for incremental submission. The plan is to: - land this change - then move deadlock detection logic from tsan - then rename it to Mutex and remove tsan Mutex - then typedef RWMutex/BlockingMutex to this mutex SpinMutex stays as separate type because it has faster fast path: 1 atomic RMW per lock/unlock as compared to 2 for this mutex. Reviewed By: vitalybuka, melver Differential Revision: https://reviews.llvm.org/D106231
Loading
Please sign in to comment