- Merge aicom-network-fixes up to r36740
[reactos.git] / rosapps / applications / fraginator / Mutex.h
1 /*****************************************************************************
2
3 Mutex
4
5 *****************************************************************************/
6
7
8 #ifndef MUTEX_H
9 #define MUTEX_H
10
11
12 #include "Unfrag.h"
13
14
15 class Mutex
16 {
17 public:
18 Mutex ()
19 {
20 // NT only code begin ... Win9x disregards this part
21 SECURITY_ATTRIBUTES MutexAttribs;
22
23 memset (&MutexAttribs, 0, sizeof (SECURITY_ATTRIBUTES));
24
25 MutexAttribs.bInheritHandle = false;
26 MutexAttribs.nLength = sizeof (SECURITY_ATTRIBUTES);
27 MutexAttribs.lpSecurityDescriptor = NULL;
28 // NT only code end
29
30 Locked = false;
31 LockCount = 0;
32 MutexHandle = CreateMutex (&MutexAttribs, Locked, NULL);
33
34 return;
35 }
36
37 ~Mutex ()
38 {
39 Lock ();
40 CloseHandle (MutexHandle);
41 }
42
43 void Lock (void)
44 {
45 Locked = true;
46 WaitForSingleObject (MutexHandle, INFINITE);
47 LockCount += 1;
48 return;
49 }
50
51
52 void Unlock (void)
53 {
54 LockCount -= 1;
55 if (LockCount <= 0)
56 {
57 LockCount = 0;
58 Locked = false;
59 }
60
61 ReleaseMutex (MutexHandle);
62 return;
63 }
64
65
66 bool IsLocked (void)
67 {
68 return (Locked);
69 }
70
71 protected:
72 uint32 LockCount;
73 HANDLE MutexHandle;
74 bool Locked;
75 };
76
77
78 #endif // MUTEX_H