ROOT
6.07/01
Reference Guide
ROOT Home Page
Main Page
Tutorials
User's Classes
Namespaces
All Classes
Files
Release Notes
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
core
thread
src
TRWLock.cxx
Go to the documentation of this file.
1
// @(#)root/thread:$Id$
2
// Author: Fons Rademakers 04/01/2000
3
4
/*************************************************************************
5
* Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6
* All rights reserved. *
7
* *
8
* For the licensing terms see $ROOTSYS/LICENSE. *
9
* For the list of contributors see $ROOTSYS/README/CREDITS. *
10
*************************************************************************/
11
12
//////////////////////////////////////////////////////////////////////////
13
// //
14
// TRWLock //
15
// //
16
// This class implements a reader/writer lock. A rwlock allows //
17
// a resource to be accessed by multiple reader threads but only //
18
// one writer thread. //
19
// //
20
//////////////////////////////////////////////////////////////////////////
21
22
#include "
TRWLock.h
"
23
24
ClassImp
(
TRWLock
)
25
26
////////////////////////////////////////////////////////////////////////////////
27
/// Create reader/write lock.
28
29
TRWLock
::
TRWLock
() : fLockFree(&fMutex)
30
{
31
fReaders = 0;
32
fWriters = 0;
33
}
34
35
////////////////////////////////////////////////////////////////////////////////
36
/// Obtain a reader lock. Returns always 0.
37
38
Int_t
TRWLock::ReadLock
()
39
{
40
fMutex
.
Lock
();
41
42
while
(
fWriters
)
43
fLockFree
.
Wait
();
44
45
fReaders
++;
46
47
fMutex
.
UnLock
();
48
49
return
0;
50
}
51
52
////////////////////////////////////////////////////////////////////////////////
53
/// Unlock reader lock. Returns -1 if thread was not locked,
54
/// 0 if everything ok.
55
56
Int_t
TRWLock::ReadUnLock
()
57
{
58
fMutex
.
Lock
();
59
60
if
(
fReaders
== 0) {
61
fMutex
.
UnLock
();
62
return
-1;
63
}
else
{
64
fReaders
--;
65
if
(
fReaders
== 0)
66
fLockFree
.
Signal
();
67
fMutex
.
UnLock
();
68
return
0;
69
}
70
}
71
72
////////////////////////////////////////////////////////////////////////////////
73
/// Obtain a writer lock. Returns always 0.
74
75
Int_t
TRWLock::WriteLock
()
76
{
77
fMutex
.
Lock
();
78
79
while
(
fWriters
||
fReaders
)
80
fLockFree
.
Wait
();
81
82
fWriters
++;
83
84
fMutex
.
UnLock
();
85
86
return
0;
87
}
88
89
////////////////////////////////////////////////////////////////////////////////
90
/// Unlock writer lock. Returns -1 if thread was not locked,
91
/// 0 if everything ok.
92
93
Int_t
TRWLock::WriteUnLock
()
94
{
95
fMutex
.
Lock
();
96
97
if
(
fWriters
== 0) {
98
fMutex
.
UnLock
();
99
return
-1;
100
}
else
{
101
fWriters
= 0;
102
fLockFree
.
Broadcast
();
103
fMutex
.
UnLock
();
104
return
0;
105
}
106
}
TRWLock::WriteUnLock
Int_t WriteUnLock()
Unlock writer lock.
Definition:
TRWLock.cxx:93
TRWLock::WriteLock
Int_t WriteLock()
Obtain a writer lock. Returns always 0.
Definition:
TRWLock.cxx:75
TRWLock::ReadLock
Int_t ReadLock()
Obtain a reader lock. Returns always 0.
Definition:
TRWLock.cxx:38
TRWLock
Definition:
TRWLock.h:37
TRWLock::fReaders
Int_t fReaders
Definition:
TRWLock.h:40
Int_t
int Int_t
Definition:
RtypesCore.h:41
TMutex::UnLock
Int_t UnLock()
Unlock the mutex.
Definition:
TMutex.cxx:68
ClassImp
ClassImp(TRWLock) TRWLock
Create reader/write lock.
Definition:
TRWLock.cxx:24
TCondition::Broadcast
Int_t Broadcast()
Definition:
TCondition.h:58
TRWLock::fWriters
Int_t fWriters
Definition:
TRWLock.h:41
TCondition::Wait
Int_t Wait()
Wait to be signaled.
Definition:
TCondition.cxx:75
TRWLock::fMutex
TMutex fMutex
Definition:
TRWLock.h:42
TRWLock::fLockFree
TCondition fLockFree
Definition:
TRWLock.h:43
TRWLock.h
TMutex::Lock
Int_t Lock()
Lock the mutex.
Definition:
TMutex.cxx:46
TRWLock::ReadUnLock
Int_t ReadUnLock()
Unlock reader lock.
Definition:
TRWLock.cxx:56
TCondition::Signal
Int_t Signal()
Definition:
TCondition.h:57