Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/compiler-rt/lib/gwp_asan/mutex.h
35236 views
1
//===-- mutex.h -------------------------------------------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef GWP_ASAN_MUTEX_H_
10
#define GWP_ASAN_MUTEX_H_
11
12
#include "gwp_asan/platform_specific/mutex_fuchsia.h" // IWYU pragma: keep
13
#include "gwp_asan/platform_specific/mutex_posix.h" // IWYU pragma: keep
14
15
namespace gwp_asan {
16
class Mutex final : PlatformMutex {
17
public:
18
constexpr Mutex() = default;
19
~Mutex() = default;
20
Mutex(const Mutex &) = delete;
21
Mutex &operator=(const Mutex &) = delete;
22
// Lock the mutex.
23
void lock();
24
// Nonblocking trylock of the mutex. Returns true if the lock was acquired.
25
bool tryLock();
26
// Unlock the mutex.
27
void unlock();
28
};
29
30
class ScopedLock {
31
public:
32
explicit ScopedLock(Mutex &Mx) : Mu(Mx) { Mu.lock(); }
33
~ScopedLock() { Mu.unlock(); }
34
ScopedLock(const ScopedLock &) = delete;
35
ScopedLock &operator=(const ScopedLock &) = delete;
36
37
private:
38
Mutex Μ
39
};
40
} // namespace gwp_asan
41
42
#endif // GWP_ASAN_MUTEX_H_
43
44