• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===----------------------------- Registers.hpp --------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //
9 // Abstract interface to shared reader/writer log, hiding platform and
10 // configuration differences.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef __RWMUTEX_HPP__
15 #define __RWMUTEX_HPP__
16 
17 #if defined(_WIN32)
18 #include <windows.h>
19 #elif !defined(_LIBUNWIND_HAS_NO_THREADS)
20 #include <pthread.h>
21 #endif
22 
23 namespace libunwind {
24 
25 #if defined(_LIBUNWIND_HAS_NO_THREADS)
26 
27 class _LIBUNWIND_HIDDEN RWMutex {
28 public:
lock_shared()29   bool lock_shared() { return true; }
unlock_shared()30   bool unlock_shared() { return true; }
lock()31   bool lock() { return true; }
unlock()32   bool unlock() { return true; }
33 };
34 
35 #elif defined(_WIN32)
36 
37 class _LIBUNWIND_HIDDEN RWMutex {
38 public:
39   bool lock_shared() {
40     AcquireSRWLockShared(&_lock);
41     return true;
42   }
43   bool unlock_shared() {
44     ReleaseSRWLockShared(&_lock);
45     return true;
46   }
47   bool lock() {
48     AcquireSRWLockExclusive(&_lock);
49     return true;
50   }
51   bool unlock() {
52     ReleaseSRWLockExclusive(&_lock);
53     return true;
54   }
55 
56 private:
57   SRWLOCK _lock = SRWLOCK_INIT;
58 };
59 
60 #else
61 
62 class _LIBUNWIND_HIDDEN RWMutex {
63 public:
64   bool lock_shared() { return pthread_rwlock_rdlock(&_lock) == 0; }
65   bool unlock_shared() { return pthread_rwlock_unlock(&_lock) == 0; }
66   bool lock() { return pthread_rwlock_wrlock(&_lock) == 0; }
67   bool unlock() { return pthread_rwlock_unlock(&_lock) == 0; }
68 
69 private:
70   pthread_rwlock_t _lock = PTHREAD_RWLOCK_INITIALIZER;
71 };
72 
73 #endif
74 
75 } // namespace libunwind
76 
77 #endif // __RWMUTEX_HPP__
78