Panda3D
Loading...
Searching...
No Matches
conditionVarDirect.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 conditionVarDirect.I
10 * @author drose
11 * @date 2006-02-13
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 */
31get_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 ConditionVarDirect will grab the lock again, and
42 * 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 */
53wait() {
54 TAU_PROFILE("ConditionVarDirect::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 */
67wait(double timeout) {
68 TAU_PROFILE("ConditionVarDirect::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 event is lost.
83 */
85notify() {
86 TAU_PROFILE("ConditionVarDirect::notify()", " ", TAU_USER);
87 _impl.notify();
88}
void notify()
Informs one 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.
ConditionVarDirect(MutexDirect &mutex)
You must pass in a Mutex to the condition variable constructor.
void wait()
Waits on the condition.
This class implements a standard mutex by making direct calls to the underlying implementation layer.
Definition mutexDirect.h:30