123456789101112131415161718192021222324252627282930313233343536373839404142 |
- //===-- mutex.h -------------------------------------------------*- C++ -*-===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- #ifndef GWP_ASAN_MUTEX_H_
- #define GWP_ASAN_MUTEX_H_
- #include "gwp_asan/platform_specific/mutex_fuchsia.h" // IWYU pragma: keep
- #include "gwp_asan/platform_specific/mutex_posix.h" // IWYU pragma: keep
- namespace gwp_asan {
- class Mutex final : PlatformMutex {
- public:
- constexpr Mutex() = default;
- ~Mutex() = default;
- Mutex(const Mutex &) = delete;
- Mutex &operator=(const Mutex &) = delete;
- // Lock the mutex.
- void lock();
- // Nonblocking trylock of the mutex. Returns true if the lock was acquired.
- bool tryLock();
- // Unlock the mutex.
- void unlock();
- };
- class ScopedLock {
- public:
- explicit ScopedLock(Mutex &Mx) : Mu(Mx) { Mu.lock(); }
- ~ScopedLock() { Mu.unlock(); }
- ScopedLock(const ScopedLock &) = delete;
- ScopedLock &operator=(const ScopedLock &) = delete;
- private:
- Mutex Μ
- };
- } // namespace gwp_asan
- #endif // GWP_ASAN_MUTEX_H_
|