Panda3D
conditionVarFullDirect.I
Go to the documentation of this file.
1 /**
2  * PANDA 3D SOFTWARE
3  * Copyright (c) Carnegie Mellon University. All rights reserved.
4  *
5  * All use of this software is subject to the terms of the revised BSD
6  * license. You should have received a copy of this license along
7  * with this source code in a file named "LICENSE."
8  *
9  * @file conditionVarFullDirect.I
10  * @author drose
11  * @date 2006-08-28
12  */
13 
14 /**
15  * You must pass in a Mutex to the condition variable constructor. This mutex
16  * may be shared by other condition variables, if desired. It is the caller's
17  * responsibility to ensure the Mutex object does not destruct during the
18  * lifetime of the condition variable.
19  */
22  _mutex(mutex),
23  _impl(mutex._impl)
24 {
25 }
26 
27 /**
28  * Returns the mutex associated with this condition variable.
29  */
31 get_mutex() const {
32  return _mutex;
33 }
34 
35 /**
36  * Waits on the condition. The caller must already be holding the lock
37  * associated with the condition variable before calling this function.
38  *
39  * wait() will release the lock, then go to sleep until some other thread
40  * calls notify() on this condition variable. At that time at least one
41  * thread waiting on the same ConditionVarFullDirect will grab the lock again,
42  * and then return from wait().
43  *
44  * It is possible that wait() will return even if no one has called notify().
45  * It is the responsibility of the calling process to verify the condition on
46  * return from wait, and possibly loop back to wait again if necessary.
47  *
48  * Note the semantics of a condition variable: the mutex must be held before
49  * wait() is called, and it will still be held when wait() returns. However,
50  * it will be temporarily released during the wait() call itself.
51  */
52 INLINE void ConditionVarFullDirect::
53 wait() {
54  TAU_PROFILE("ConditionVarFullDirect::wait()", " ", TAU_USER);
55  _impl.wait();
56 }
57 
58 /**
59  * Waits on the condition, with a timeout. The function will return when the
60  * condition variable is notified, or the timeout occurs. There is no way to
61  * directly tell which happened, and it is possible that neither in fact
62  * happened (spurious wakeups are possible).
63  *
64  * See wait() with no parameters for more.
65  */
67 wait(double timeout) {
68  TAU_PROFILE("ConditionVarFullDirect::wait(double)", " ", TAU_USER);
69  _impl.wait(timeout);
70 }
71 
72 /**
73  * Informs one of the other threads who are currently blocked on wait() that
74  * the relevant condition has changed. If multiple threads are currently
75  * waiting, at least one of them will be woken up, although there is no way to
76  * predict which one. It is possible that more than one thread will be woken
77  * up.
78  *
79  * The caller must be holding the mutex associated with the condition variable
80  * before making this call, which will not release the mutex.
81  *
82  * If no threads are waiting, this is a no-op: the notify is lost.
83  */
84 INLINE void ConditionVarFullDirect::
85 notify() {
86  TAU_PROFILE("ConditionVarFullDirect::notify()", " ", TAU_USER);
87  _impl.notify();
88 }
89 
90 /**
91  * Informs all of the other threads who are currently blocked on wait() that
92  * the relevant condition has changed.
93  *
94  * The caller must be holding the mutex associated with the condition variable
95  * before making this call, which will not release the mutex.
96  *
97  * If no threads are waiting, this is a no-op: the notify event is lost.
98  */
99 INLINE void ConditionVarFullDirect::
101  TAU_PROFILE("ConditionVarFullDirect::notify()", " ", TAU_USER);
102  _impl.notify_all();
103 }
void notify()
Informs one of the other threads who are currently blocked on wait() that the relevant condition has ...
void wait()
Waits on the condition.
void notify_all()
Informs all of the other threads who are currently blocked on wait() that the relevant condition has ...
MutexDirect & get_mutex() const
Returns the mutex associated with this condition variable.
ConditionVarFullDirect(MutexDirect &mutex)
You must pass in a Mutex to the condition variable constructor.
This class implements a standard mutex by making direct calls to the underlying implementation layer.
Definition: mutexDirect.h:30