-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathDoubleThreadLock.cpp
62 lines (56 loc) · 935 Bytes
/
DoubleThreadLock.cpp
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
#include "DoubleThreadLock.h"
#include <thread>
namespace AwpSoftGameModule
{
DoubleThreadLock::DoubleThreadLock()
{
__Lock1 = __Lock2 = __RL1 = __RL2 = false;
}
DoubleThreadLock::~DoubleThreadLock() {}
void DoubleThreadLock::lock1()
{
__RL1 = true;
__Lock1 = true;
while (__Lock2)
{
if (__Lock1)
{
__Lock1 = false;
std::this_thread::yield();
__Lock1 = true;
}
}
}
void DoubleThreadLock::lock2()
{
__RL2 = true;
__Lock2 = true;
while (__Lock1)
{
if (__Lock2)
{
__Lock2 = false;
std::this_thread::yield();
__Lock2 = true;
}
}
}
void DoubleThreadLock::unlock1()
{
__Lock1 = false;
__RL1 = false;
}
void DoubleThreadLock::unlock2()
{
__Lock2 = false;
__RL2 = false;
}
void DoubleThreadLock::waitUnlock1()
{
while (__RL1) std::this_thread::yield();
}
void DoubleThreadLock::waitUnlock2()
{
while (__RL2) std::this_thread::yield();
}
};