Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wine-mirror
GitHub Repository: wine-mirror/wine
Path: blob/master/libs/unwind/src/RWMutex.hpp
12346 views
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:
29
bool lock_shared() { return true; }
30
bool unlock_shared() { return true; }
31
bool lock() { return true; }
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
79