Main Page
Namespaces
Classes
Package Documentation
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Pages
Utilities
General
interface
MutexUtils.h
Go to the documentation of this file.
1
#ifndef UTILITIES_GENERAL_MUTEXUTILS_H
2
#define UTILITIES_GENERAL_MUTEXUTILS_H
3
//
4
// thread Utilities...
5
//
6
#include <boost/thread/recursive_mutex.hpp>
7
#include <boost/thread/mutex.hpp>
8
#include <boost/thread/xtime.hpp>
9
#include <boost/thread/condition.hpp>
10
#include <boost/thread/tss.hpp>
11
12
#include <iosfwd>
13
14
class
MutexI
{
15
public
:
16
virtual
~MutexI
(){}
17
virtual
void
lock
()=0;
18
virtual
void
unlock
()=0;
19
20
class
scoped_lock
{
21
MutexI
&
m
;
22
public
:
23
scoped_lock
(
MutexI
& im) :
m
(im) {
m
.
lock
();}
24
~scoped_lock
() {
m
.
unlock
();}
25
};
26
27
};
28
29
struct
DummyMutex
:
public
MutexI
{
30
void
lock
(){}
31
void
unlock
(){}
32
};
33
34
template
<
class
M=boost::recursive_mutex>
35
class
AnyMutex
:
public
MutexI
{
36
M &
m
;
37
public
:
38
typedef
M
Mutex
;
39
typedef
MutexI::scoped_lock
scoped_lock
;
40
AnyMutex
(M & im) :
m
(im){}
41
void
lock
() {
m
.lock();}
42
void
unlock
() {
m
.unlock();}
43
};
44
45
46
std::ostream &
TSafeOstream
();
47
48
49
template
<
class
M>
50
class
lockSentry
{
51
public
:
52
typedef
M
Mutex
;
53
54
explicit
lockSentry
(M& im) :
m
(im) {}
55
~lockSentry
() {}
56
57
operator
typename
M::scoped_lock & () {
return
m
;}
58
typename
M::scoped_lock &
operator()
() {
return
m
;}
59
60
private
:
61
typename
M::scoped_lock
m
;
62
63
};
64
65
typedef
lockSentry<boost::recursive_mutex>
LockMutex
;
66
67
typedef
lockSentry<boost::mutex>
SimpleLockMutex
;
68
69
namespace
Capri {
70
71
// the global mutex...
72
extern
LockMutex::Mutex
glMutex
;
73
74
}
75
76
77
template
<
class
M=boost::recursive_mutex>
78
struct
ThreadTraits
{
79
80
typedef
M
Mutex
;
81
83
template
<
class
T>
static
Mutex
&
myMutex
(
const
T
*) {
84
static
Mutex
locm;
85
return
locm;
86
}
87
88
89
};
90
91
92
template
<
class
T,
class
M=boost::recursive_mutex>
93
class
classLock
:
private
lockSentry
<M> {
94
public
:
95
explicit
classLock
(
const
T
* me) :
lockSentry
<M>(
ThreadTraits
<M>::myMutex(me)){}
96
~classLock
(){}
97
};
98
99
100
struct
boostFuture
{
101
boost::xtime
xt
;
102
103
boostFuture
(
int
i
) {
104
boost::xtime_get(&
xt
, boost::TIME_UTC);
105
xt
.sec +=
i
;
106
}
107
108
operator
const
boost::xtime & ()
const
{
return
xt
;}
109
110
};
111
112
inline
pthread_t
thread_self_tid
() {
return
pthread_self();}
113
114
115
116
template
<
typename
T>
117
class
ThreadMessage
{
118
public
:
119
typedef
T
Case
;
120
121
const
Case
&
operator()
()
const
{
122
SimpleLockMutex
gl(
lock
);
123
doit
.wait(gl());
124
return
it
;
125
}
126
127
void
go
(
const
Case
&
i
) {
128
SimpleLockMutex
gl(
lock
);
129
it
=
i
;
130
doit
.notify_all();
131
}
132
133
const
Case
&
get
()
const
{
return
it
;}
134
135
private
:
136
137
mutable
SimpleLockMutex::Mutex
lock
;
138
mutable
boost::condition
doit
;
139
Case
it
;
140
};
141
142
namespace
{
143
template
<
typename
T>
144
struct
defF {
145
T
* operator()() {
146
return
new
T
();
147
}
148
};
149
150
}
151
152
template
<
typename
T,
typename
F=defF<T> >
153
class
ThreadSingleton
{
154
public
:
155
156
static
T
&
instance
(
F
&
f
=
factory
()) {
157
static
boost::thread_specific_ptr<T> me;
158
if
(!me.get()) {
159
T
*
t
=
buildMe
(
f
);
160
me.reset(t);
161
}
162
return
*me;
163
}
164
165
private
:
166
static
F
&
factory
() {
167
static
F
f
;
168
return
f
;
169
}
170
171
static
T
*
buildMe
(
F
&
f
) {
172
return
f
();
173
}
174
175
};
176
177
#endif // UTILITIES_THREADS_MUTEXUTILS_H
TSafeOstream
std::ostream & TSafeOstream()
i
int i
Definition:
DBlmapReader.cc:9
ThreadMessage
Definition:
MutexUtils.h:117
lockSentry::m
M::scoped_lock m
Definition:
MutexUtils.h:61
classLock
Definition:
MutexUtils.h:93
MutexI::lock
virtual void lock()=0
DummyMutex::lock
void lock()
Definition:
MutexUtils.h:30
ThreadTraits
Definition:
MutexUtils.h:78
boostFuture
Definition:
MutexUtils.h:100
ThreadMessage::operator()
const Case & operator()() const
Definition:
MutexUtils.h:121
ThreadTraits::myMutex
static Mutex & myMutex(const T *)
a static safe class level mutex...
Definition:
MutexUtils.h:83
lumiQTWidget.t
tuple t
Definition:
lumiQTWidget.py:50
MutexI::scoped_lock::~scoped_lock
~scoped_lock()
Definition:
MutexUtils.h:24
lockSentry
Definition:
MutexUtils.h:50
ThreadMessage::go
void go(const Case &i)
Definition:
MutexUtils.h:127
lockSentry::lockSentry
lockSentry(M &im)
Definition:
MutexUtils.h:54
AnyMutex::Mutex
M Mutex
Definition:
MutexUtils.h:38
MutexI::unlock
virtual void unlock()=0
lockSentry::Mutex
M Mutex
Definition:
MutexUtils.h:52
DummyMutex
Definition:
MutexUtils.h:29
boostFuture::boostFuture
boostFuture(int i)
Definition:
MutexUtils.h:103
MutexI::scoped_lock::m
MutexI & m
Definition:
MutexUtils.h:21
ThreadTraits::Mutex
M Mutex
Definition:
MutexUtils.h:80
AnyMutex::scoped_lock
MutexI::scoped_lock scoped_lock
Definition:
MutexUtils.h:39
DummyMutex::unlock
void unlock()
Definition:
MutexUtils.h:31
ThreadSingleton::instance
static T & instance(F &f=factory())
Definition:
MutexUtils.h:156
AnyMutex::m
M & m
Definition:
MutexUtils.h:36
MutexI
Definition:
MutexUtils.h:14
MutexI::scoped_lock
Definition:
MutexUtils.h:20
LockMutex
lockSentry< boost::recursive_mutex > LockMutex
Definition:
MutexUtils.h:65
ThreadMessage::Case
T Case
Definition:
MutexUtils.h:119
ThreadSingleton::factory
static F & factory()
Definition:
MutexUtils.h:166
MutexI::~MutexI
virtual ~MutexI()
Definition:
MutexUtils.h:16
AnyMutex
Definition:
MutexUtils.h:35
Capri::glMutex
LockMutex::Mutex glMutex
f
double f[11][100]
Definition:
MuScleFitUtils.cc:80
AnyMutex::unlock
void unlock()
Definition:
MutexUtils.h:42
lockSentry::operator()
M::scoped_lock & operator()()
Definition:
MutexUtils.h:58
SimpleLockMutex
lockSentry< boost::mutex > SimpleLockMutex
Definition:
MutexUtils.h:67
ThreadMessage::lock
SimpleLockMutex::Mutex lock
Definition:
MutexUtils.h:137
ThreadSingleton::buildMe
static T * buildMe(F &f)
Definition:
MutexUtils.h:171
ThreadMessage::doit
boost::condition doit
Definition:
MutexUtils.h:138
boostFuture::xt
boost::xtime xt
Definition:
MutexUtils.h:101
AnyMutex::AnyMutex
AnyMutex(M &im)
Definition:
MutexUtils.h:40
ThreadSingleton
Definition:
MutexUtils.h:153
MutexI::scoped_lock::scoped_lock
scoped_lock(MutexI &im)
Definition:
MutexUtils.h:23
ThreadMessage::it
Case it
Definition:
MutexUtils.h:139
classLock::classLock
classLock(const T *me)
Definition:
MutexUtils.h:95
F
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
Definition:
blowfish.cc:281
classLock::~classLock
~classLock()
Definition:
MutexUtils.h:96
T
long double T
Definition:
Basic3DVectorLD.h:59
lockSentry::~lockSentry
~lockSentry()
Definition:
MutexUtils.h:55
AnyMutex::lock
void lock()
Definition:
MutexUtils.h:41
thread_self_tid
pthread_t thread_self_tid()
Definition:
MutexUtils.h:112
Generated for CMSSW Reference Manual by
1.8.5