The Pedigree Project
0.1
src
system
include
pedigree
kernel
process
ConditionVariable.h
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
#ifndef KERNEL_PROCESS_CONDITIONVARIABLE_H
21
#define KERNEL_PROCESS_CONDITIONVARIABLE_H
22
#include "pedigree/kernel/compiler.h"
23
#include "pedigree/kernel/process/WaitQueue.h"
24
#include "pedigree/kernel/time/Time.h"
25
#include "pedigree/kernel/utilities/new"
26
27
#include <config.h>
28
29
class
Mutex
;
30
class
Thread
;
31
35
class
EXPORTED_PUBLIC
ConditionVariable
{
36
public
:
37
enum
Error { NoError, TimedOut, Interrupted, TerminationDeferred, MutexNotLocked };
38
40
static
bool
mutexAcquired
(Error error) {
41
return
error != MutexNotLocked;
42
}
43
44
ConditionVariable
();
45
~ConditionVariable
();
46
63
MUST_USE_RESULT
bool
wait(
Mutex
& mutex, Time::Timestamp& timeout, Error& error,
64
WaitQueue::StackDiscardCleanup onStackDiscard =
nullptr
,
65
void
* stackDiscardContext =
nullptr
);
66
68
MUST_USE_RESULT
bool
wait(
Mutex
& mutex, Error& error,
69
WaitQueue::StackDiscardCleanup onStackDiscard =
nullptr
,
70
void
* stackDiscardContext =
nullptr
);
71
80
void
waitForCompletion(
Mutex
& mutex);
81
83
void
signal();
84
86
void
broadcast();
87
88
private
:
89
#if THREADS
90
WaitQueue
m_Waiters;
91
#endif
92
94
void
*
m_Private
;
95
};
96
97
#endif
ConditionVariable
Definition
ConditionVariable.h:35
ConditionVariable::m_Private
void * m_Private
Private data.
Definition
ConditionVariable.h:94
ConditionVariable::mutexAcquired
static bool mutexAcquired(Error error)
Definition
ConditionVariable.h:40
Mutex
Definition
Mutex.h:56
Thread
Definition
Thread.h:75
WaitQueue
Definition
WaitQueue.h:28
MUST_USE_RESULT
#define MUST_USE_RESULT
Definition
system/include/pedigree/kernel/compiler.h:70
Generated on Thu Sep 24 2026 06:24:01 for The Pedigree Project by
1.9.8