/Users/buildslave/jenkins/sharedspace/clang-stage2-coverage-R@2/llvm/include/llvm/Support/MutexGuard.h
Line | Count | Source (jump to first uncovered line) |
1 | | //===-- Support/MutexGuard.h - Acquire/Release Mutex In Scope ---*- C++ -*-===// |
2 | | // |
3 | | // The LLVM Compiler Infrastructure |
4 | | // |
5 | | // This file is distributed under the University of Illinois Open Source |
6 | | // License. See LICENSE.TXT for details. |
7 | | // |
8 | | //===----------------------------------------------------------------------===// |
9 | | // |
10 | | // This file defines a guard for a block of code that ensures a Mutex is locked |
11 | | // upon construction and released upon destruction. |
12 | | // |
13 | | //===----------------------------------------------------------------------===// |
14 | | |
15 | | #ifndef LLVM_SUPPORT_MUTEXGUARD_H |
16 | | #define LLVM_SUPPORT_MUTEXGUARD_H |
17 | | |
18 | | #include "llvm/Support/Mutex.h" |
19 | | |
20 | | namespace llvm { |
21 | | /// Instances of this class acquire a given Mutex Lock when constructed and |
22 | | /// hold that lock until destruction. The intention is to instantiate one of |
23 | | /// these on the stack at the top of some scope to be assured that C++ |
24 | | /// destruction of the object will always release the Mutex and thus avoid |
25 | | /// a host of nasty multi-threading problems in the face of exceptions, etc. |
26 | | /// @brief Guard a section of code with a Mutex. |
27 | | class MutexGuard { |
28 | | sys::Mutex &M; |
29 | | MutexGuard(const MutexGuard &) = delete; |
30 | | void operator=(const MutexGuard &) = delete; |
31 | | public: |
32 | 1.28M | MutexGuard(sys::Mutex &m) : M(m) { M.lock(); } |
33 | 1.28M | ~MutexGuard() { M.unlock(); } |
34 | | /// holds - Returns true if this locker instance holds the specified lock. |
35 | | /// This is mostly used in assertions to validate that the correct mutex |
36 | | /// is held. |
37 | 0 | bool holds(const sys::Mutex& lock) const { return &M == &lock; } |
38 | | }; |
39 | | } |
40 | | |
41 | | #endif // LLVM_SUPPORT_MUTEXGUARD_H |