-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmultithread.h
72 lines (59 loc) · 1007 Bytes
/
multithread.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
63
64
65
66
67
68
69
70
71
72
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// multithread.h
#ifndef _MULTITHREAD_H
# define _MULTITHREAD_H
# include <windows.h>
///
class SyncObject
{
public:
///
virtual void acquire() = 0;
///
virtual void acquire(int ) {
acquire();
}
///
virtual void release() = 0;
};
///
class CriticalSection : public SyncObject
{
CRITICAL_SECTION m_cs; ///
public:
///
CriticalSection() {
InitializeCriticalSection(&m_cs);
}
///
~CriticalSection() {
DeleteCriticalSection(&m_cs);
}
///
void acquire() {
EnterCriticalSection(&m_cs);
}
///
void release() {
LeaveCriticalSection(&m_cs);
}
};
///
class Acquire
{
SyncObject *m_so; ///
public:
///
Acquire(SyncObject *i_so) : m_so(i_so) {
m_so->acquire();
}
///
Acquire(SyncObject *i_so, int i_n) : m_so(i_so) {
m_so->acquire(i_n);
}
///
~Acquire() {
m_so->release();
}
};
#endif // !_MULTITHREAD_H