The Pedigree Project
0.1
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
src
system
kernel
utilities
UnlikelyLock.cc
1
/*
2
* Copyright (c) 2008-2014, Pedigree Developers
3
*
4
* Please see the CONTRIB file in the root of the source tree for a full
5
* list of contributors.
6
*
7
* Permission to use, copy, modify, and distribute this software for any
8
* purpose with or without fee is hereby granted, provided that the above
9
* copyright notice and this permission notice appear in all copies.
10
*
11
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18
*/
19
20
#include "
pedigree/kernel/utilities/UnlikelyLock.h
"
21
#include "pedigree/kernel/LockGuard.h"
22
23
UnlikelyLock::UnlikelyLock()
24
: m_Lock(false), m_Condition(), m_nReaders(0), m_bActiveWriter(false)
25
{
26
}
27
28
UnlikelyLock::~UnlikelyLock()
29
{
30
}
31
32
bool
UnlikelyLock::enter
()
33
{
34
LockGuard<Mutex>
guard(m_Lock);
35
while
(m_bActiveWriter)
36
{
37
m_Condition.wait(m_Lock);
38
}
39
40
++m_nReaders;
41
return
true
;
42
}
43
44
void
UnlikelyLock::leave
()
45
{
46
LockGuard<Mutex>
guard(m_Lock);
47
if
(!--m_nReaders)
48
{
49
m_Condition.signal();
50
}
51
}
52
53
bool
UnlikelyLock::acquire
()
54
{
55
LockGuard<Mutex>
guard(m_Lock);
56
while
(m_bActiveWriter || m_nReaders)
57
{
58
m_Condition.wait(m_Lock);
59
}
60
61
m_bActiveWriter =
true
;
62
return
true
;
63
}
64
65
void
UnlikelyLock::release
()
66
{
67
LockGuard<Mutex>
guard(m_Lock);
68
m_bActiveWriter =
false
;
69
m_Condition.broadcast();
70
}
LockGuard
Definition:
LockGuard.h:33
UnlikelyLock::acquire
bool acquire()
Definition:
UnlikelyLock.cc:53
UnlikelyLock.h
UnlikelyLock::enter
bool enter()
Definition:
UnlikelyLock.cc:32
UnlikelyLock::leave
void leave()
Definition:
UnlikelyLock.cc:44
UnlikelyLock::release
void release()
Definition:
UnlikelyLock.cc:65
Generated on Fri Jan 24 2020 06:49:08 for The Pedigree Project by
1.8.11