-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMutexBare.h
62 lines (46 loc) · 1.18 KB
/
MutexBare.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#pragma once
#include"BaseLib/CommonDefines.h"
#include"BaseLib/MutexPolicy.h"
#include"BaseLib/Export.h"
namespace BaseLib
{
class DLL_STATE MutexVariableHolderBare
: public ENABLE_SHARED_FROM_THIS(MutexVariableHolderBare)
{
public:
MutexVariableHolderBare();
~MutexVariableHolderBare();
#ifdef USE_GCC
pthread_mutex_t& GetMutex() { return mutex_; }
#else
CRITICAL_SECTION& GetMutex() { return criticalSection_; }
#endif
private:
#ifdef USE_GCC
pthread_mutex_t mutex_;
#else
CRITICAL_SECTION criticalSection_;
#endif
private:
MutexVariableHolderBare(const MutexVariableHolderBare &) { }
MutexVariableHolderBare& operator=(const MutexVariableHolderBare&) { return *this; }
};
class DLL_STATE MutexBare
{
public:
explicit MutexBare(MutexPolicy policy = MutexPolicy::No());
MutexBare(const MutexBare &other);
~MutexBare();
MutexBare& operator=(const MutexBare&);
friend class WaitCondition;
void lock();
void unlock();
bool tryLock(int64 milliseconds = 0);
bool isDebug() const;
private:
bool tryLockPrivate();
private:
MutexPolicy policy_;
std::shared_ptr<MutexVariableHolderBare> mutexHolder_;
};
}