libnx
condvar.h
Go to the documentation of this file.
1 /**
2  * @file condvar.h
3  * @brief Condition variable synchronization primitive.
4  * @author plutoo
5  * @copyright libnx Authors
6  */
7 #include "../types.h"
8 #include "../kernel/mutex.h"
9 
10 /// Condition variable structure.
11 typedef struct {
12  u32 tag;
13  Mutex* mutex;
14 } CondVar;
15 
16 /**
17  * @brief Initializes a condition variable.
18  * @param[in] c Condition variable object.
19  * @param[in] m Mutex object to use inside the condition variable.
20  */
21 void condvarInit(CondVar* c, Mutex* m);
22 
23 /**
24  * @brief Waits on a condition variable with a timeout.
25  * @param[in] c Condition variable object.
26  * @param[in] timeout Timeout in nanoseconds.
27  * @return Result code (0xEA01 on timeout).
28  * @remark On function return, the underlying mutex is acquired.
29  */
31 
32 /**
33  * @brief Waits on a condition variable.
34  * @param[in] c Condition variable object.
35  * @return Result code.
36  * @remark On function return, the underlying mutex is acquired.
37  */
38 static inline Result condvarWait(CondVar* c)
39 {
40  return condvarWaitTimeout(c, -1ull);
41 }
42 
43 /**
44  * @brief Wakes up up to the specified number of threads waiting on a condition variable.
45  * @param[in] c Condition variable object.
46  * @param[in] num Maximum number of threads to wake up (or -1 to wake them all up).
47  * @return Result code.
48  */
49 Result condvarWake(CondVar* c, int num);
50 
51 /**
52  * @brief Wakes up a single thread waiting on a condition variable.
53  * @param[in] c Condition variable object.
54  * @return Result code.
55  */
56 static inline Result condvarWakeOne(CondVar* c)
57 {
58  return condvarWake(c, 1);
59 }
60 
61 /**
62  * @brief Wakes up all thread waiting on a condition variable.
63  * @param[in] c Condition variable object.
64  * @return Result code.
65  */
66 static inline Result condvarWakeAll(CondVar* c)
67 {
68  return condvarWake(c, -1);
69 }
_LOCK_T Mutex
Mutex datatype, defined in newlib.
Definition: mutex.h:12
static Result condvarWakeAll(CondVar *c)
Wakes up all thread waiting on a condition variable.
Definition: condvar.h:66
void condvarInit(CondVar *c, Mutex *m)
Initializes a condition variable.
u32 Result
Function error code result type.
Definition: types.h:46
uint64_t u64
64-bit unsigned integer.
Definition: types.h:24
uint32_t u32
32-bit unsigned integer.
Definition: types.h:23
static Result condvarWait(CondVar *c)
Waits on a condition variable.
Definition: condvar.h:38
Condition variable structure.
Definition: condvar.h:11
static Result condvarWakeOne(CondVar *c)
Wakes up a single thread waiting on a condition variable.
Definition: condvar.h:56
Result condvarWake(CondVar *c, int num)
Wakes up up to the specified number of threads waiting on a condition variable.
Result condvarWaitTimeout(CondVar *c, u64 timeout)
Waits on a condition variable with a timeout.