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`, in microseconds. 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, int64_t timeout_duration)