acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
critical_section.h
1// Created by camilo on 2023-04-25 23:51 <3ThomasBorregaardSorensen!!
2#pragma once
3
4
6
7
8class CLASS_DECL_ACME critical_section
9{
10public:
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
28class CLASS_DECL_ACME critical_section_lock
29{
30public:
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
103class CLASS_DECL_ACME raw_critical_section_lock
104{
105public:
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
Definition critical_section.cpp:22
Definition critical_section.h:9