Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Класс condition_variable используется для ожидания события при наличии mutex типа unique_lock<mutex>. Объекты этого типа могут иметь лучшую производительность, чем объекты типа condition_variable_any unique_lock мьютекса>>.<<
Синтаксис
class condition_variable;
Участники
Конструкторы
| Имя | Описание |
|---|---|
| condition_variable | Формирует объект condition_variable. |
Функции
| Имя | Описание |
|---|---|
| native_handle | Возвращает тип реализации, представляющий дескриптор condition_variable. |
| notify_all | Разблокирует все потоки, которые ожидают объект condition_variable. |
| notify_one | Разблокирует один из потоков, которые ожидают объект condition_variable. |
| ждать | Блокирует поток. |
| wait_for | Блокирует поток и задает интервал времени, после которого поток разблокируется. |
| wait_until | Блокирует поток и задает максимальный момент времени, в который поток разблокируется. |
condition_variable
Формирует объект condition_variable.
condition_variable();
Замечания
При недостатке памяти этот конструктор вызывает объект system_error, имеющий код ошибки not_enough_memory. Если объект не может быть создан из-за недоступности некоторых других ресурсов, конструктор создает объект system_error, имеющий код ошибки resource_unavailable_try_again.
native_handle
Возвращает тип реализации, представляющий дескриптор condition_variable.
native_handle_type native_handle();
Возвращаемое значение
native_handle_type определяется как указатель на внутренние структуры данных среды выполнения с параллелизмом.
notify_all
Разблокирует все потоки, которые ожидают объект condition_variable.
void notify_all() noexcept;
notify_one
Разблокирует один из потоков, которые ожидают объект condition_variable.
void notify_one() noexcept;
wait
Блокирует поток.
void wait(unique_lock<mutex>& Lck);
template <class Predicate>
void wait(unique_lock<mutex>& Lck, Predicate Pred);
Параметры
Lck
Объект unique_lock мьютекса>.<
Пред
Любое выражение, возвращающее значение true или false.
Замечания
Первый метод блокируется до оповещения объекта condition_variable путем вызова notify_one или notify_all. Он может также ложно активироваться.
Второй метод фактически выполняет следующий код.
while(!Pred())
wait(Lck);
wait_for
Блокирует поток и задает интервал времени, после которого поток разблокируется.
template <class Rep, class Period>
cv_status wait_for(
unique_lock<mutex>& Lck,
const chrono::duration<Rep, Period>& Rel_time);
template <class Rep, class Period, class Predicate>
bool wait_for(
unique_lock<mutex>& Lck,
const chrono::duration<Rep, Period>& Rel_time,
Predicate Pred);
Параметры
Lck
Объект unique_lock мьютекса>.<
Rel_time
Объект chrono::duration, указывающий количество времени до активации потока.
Пред
Любое выражение, возвращающее значение true или false.
Возвращаемое значение
Первый метод возвращается cv_status::timeout , если ожидание завершается, когда Rel_time истекает. В противном случае метод возвращает значение cv_status::no_timeout.
Второй метод возвращает значение Pred.
Замечания
Первый метод блокируется, пока объект не condition_variable будет сигнален вызовом notify_one или notify_all или до истечения интервала времени Rel_time. Он может также ложно активироваться.
Второй метод фактически выполняет следующий код.
while(!Pred())
if(wait_for(Lck, Rel_time) == cv_status::timeout)
return Pred();
return true;
wait_until
Блокирует поток и задает максимальный момент времени, в который поток разблокируется.
template <class Clock, class Duration>
cv_status wait_until(
unique_lock<mutex>& Lck,
const chrono::time_point<Clock, Duration>& Abs_time);
template <class Clock, class Duration, class Predicate>
bool wait_until(
unique_lock<mutex>& Lck,
const chrono::time_point<Clock, Duration>& Abs_time,
Predicate Pred);
cv_status wait_until(
unique_lock<mutex>& Lck,
const xtime* Abs_time);
template <class Predicate>
bool wait_until(
unique_lock<mutex>& Lck,
const xtime* Abs_time,
Predicate Pred);
Параметры
Lck
Объект unique_lock мьютекса>.<
Abs_time
Объект chrono::time_point.
Пред
Любое выражение, возвращающее значение true или false.
Возвращаемое значение
Методы, возвращающие тип, cv_status cv_status::timeout возвращаются, если ожидание завершается, когда Abs_time истекает. В противном случае эти методы возвращают cv_status::no_timeout.
Методы, возвращающие bool возвращаемое значение Pred.
Замечания
Первый метод блокируется до оповещения объекта condition_variable путем вызова notify_one или notify_allAbs_time. Он может также ложно активироваться.
Второй метод фактически выполняет следующий код.
while(!Pred())
if(wait_until(Lck, Abs_time) == cv_status::timeout)
return Pred();
return true;
Третий и четвертый методы используют указатель на объект типа xtime для замены объекта chrono::time_point. Объект xtime задает максимальное время ожидания сигнала.