acme
Foundational cross-platform layer of the ca2 framework
Toggle main menu visibility
Loading...
Searching...
No Matches
critical_section.h
1
// Created by camilo on 2023-04-25 23:51 <3ThomasBorregaardSorensen!!
2
#pragma once
3
4
5
class
critical_section_impl
;
6
7
8
class
CLASS_DECL_ACME critical_section
9
{
10
public
:
11
12
13
critical_section_impl
* m_pimpl;
14
15
16
critical_section();
17
~critical_section();
18
19
20
void
lock();
21
void
unlock();
22
23
24
};
25
26
27
28
class
CLASS_DECL_ACME critical_section_lock
29
{
30
public
:
31
32
33
bool
m_bLocked;
34
critical_section
* m_pcriticalsection;
35
36
37
inline
critical_section_lock(
critical_section
* pcriticalsection,
bool
bInitialLock =
true
) :
38
m_pcriticalsection(pcriticalsection),
39
m_bLocked(
false
)
40
{
41
42
if
(bInitialLock)
43
{
44
45
lock();
46
47
}
48
49
}
50
51
52
inline
~critical_section_lock()
53
{
54
55
unlock();
56
57
}
58
59
60
void
lock()
61
{
62
63
if
(m_pcriticalsection !=
nullptr
)
64
{
65
66
if
(!m_bLocked)
67
{
68
69
m_pcriticalsection->lock();
70
71
m_bLocked =
true
;
72
73
}
74
75
}
76
77
}
78
79
80
void
unlock()
81
{
82
83
if
(m_bLocked)
84
{
85
86
if
(m_pcriticalsection !=
nullptr
)
87
{
88
89
m_pcriticalsection->unlock();
90
91
m_bLocked =
false
;
92
93
}
94
95
}
96
97
}
98
99
100
};
101
102
103
class
CLASS_DECL_ACME raw_critical_section_lock
104
{
105
public
:
106
107
108
critical_section
* m_pcriticalsection;
109
110
111
inline
raw_critical_section_lock(
critical_section
* pcriticalsection) :
112
m_pcriticalsection(pcriticalsection)
113
{
114
115
m_pcriticalsection->lock();
116
117
}
118
119
120
inline
~raw_critical_section_lock()
121
{
122
123
m_pcriticalsection->unlock();
124
125
}
126
127
128
};
129
130
131
critical_section_impl
Definition
critical_section.cpp:22
critical_section
Definition
critical_section.h:9
parallelization
critical_section.h
Generated by
1.17.0