blob: 2d8f30b5fdce202da33f5bd12224eefcd9c32a53 [file] [log] [blame] [view]
Project: /youtube/cobalt/_project.yaml
Book: /youtube/cobalt/_book.yaml
# Starboard Module Reference: `condition_variable.h`
Defines an interface for condition variables.
## Macros
### SB_CONDITION_VARIABLE_MAX_SIZE
Max size of the SbConditionVariable type.
## Enums
### SbConditionVariableResult
Enumeration of possible results from waiting on a condvar.
#### Values
* `kSbConditionVariableSignaled`
The wait completed because the condition variable was signaled.
* `kSbConditionVariableTimedOut`
The wait completed because it timed out, and was not signaled.
* `kSbConditionVariableFailed`
The wait failed, either because a parameter wasn't valid, or the condition
variable has already been destroyed, or something similar.
## Typedefs
### SbConditionVariable
An opaque handle to a condition variable type with reserved memory buffer of
size SB_CONDITION_VARIABLE_MAX_SIZE and aligned at void pointer type.
#### Definition
```
typedef union SbConditionVariable SbConditionVariable
```
## Functions
### SbConditionVariableBroadcast
Broadcasts to all current waiters of `condition` to stop waiting. This function
wakes all of the threads waiting on `condition` while SbConditionVariableSignal
wakes a single thread.
`condition`: The condition that should no longer be waited for.
#### Declaration
```
bool SbConditionVariableBroadcast(SbConditionVariable *condition)
```
### SbConditionVariableCreate
Creates a new condition variable to work with `opt_mutex`, which may be null,
placing the newly created condition variable in `out_condition`.
The return value indicates whether the condition variable could be created.
#### Declaration
```
bool SbConditionVariableCreate(SbConditionVariable *out_condition, SbMutex *opt_mutex)
```
### SbConditionVariableDestroy
Destroys the specified SbConditionVariable . The return value indicates whether
the destruction was successful. The behavior is undefined if other threads are
currently waiting on this condition variable.
`condition`: The SbConditionVariable to be destroyed. This invalidates the
condition variable.
#### Declaration
```
bool SbConditionVariableDestroy(SbConditionVariable *condition)
```
### SbConditionVariableIsSignaled
Returns whether the given result is a success.
#### Declaration
```
static bool SbConditionVariableIsSignaled(SbConditionVariableResult result)
```
### SbConditionVariableSignal
Signals the next waiter of `condition` to stop waiting. This function wakes a
single thread waiting on `condition` while SbConditionVariableBroadcast wakes
all threads waiting on it.
`condition`: The condition that the waiter should stop waiting for.
#### Declaration
```
bool SbConditionVariableSignal(SbConditionVariable *condition)
```
### SbConditionVariableWait
Waits for `condition`, releasing the held lock `mutex`, blocking indefinitely,
and returning the result. Behavior is undefined if `mutex` is not held.
#### Declaration
```
SbConditionVariableResult SbConditionVariableWait(SbConditionVariable *condition, SbMutex *mutex)
```
### SbConditionVariableWaitTimed
Waits for `condition`, releasing the held lock `mutex`, blocking up to
`timeout_duration`, and returning the acquisition result. Behavior is undefined
if `mutex` is not held.
`timeout_duration`: The maximum amount of time that function should wait for
`condition`. If the `timeout_duration` value is less than or equal to zero, the
function returns as quickly as possible with a kSbConditionVariableTimedOut
result.
#### Declaration
```
SbConditionVariableResult SbConditionVariableWaitTimed(SbConditionVariable *condition, SbMutex *mutex, SbTime timeout_duration)
```