<condition_variable>
Определяет классы condition_variable и condition_variable_any, которые используются для создания объектов, ожидающие условие для освобождения true.
Этот заголовок используется среда выполнения с параллелизмом (ConcRT), чтобы можно было использовать его вместе с другими механизмами ConcRT.Дополнительные сведения о ConcRT см. в разделе Среда выполнения с параллелизмом.
#include <condition_variable>
![]() |
---|
В коде, компилироваться с помощью /clr или /clr:pure, этот заголовок блокируется. |
Заметки
Код, который ожидает переменную условия также должен использовать mutex.Вызывающий поток должен блокировать mutex, прежде чем вызывать функции, ожидающие переменную условия.Затем mutex блокировано, если вызываемая функция возвращает.mutex не блокировано поток ожидает, пока условие для освобождения true.Таким образом, чтобы не будут непредвиденные результаты, каждый поток, который ожидает переменную условия должен использоваться один и тот же объект mutex.
Объекты типа condition_variable_any можно использовать с мьютексом любого типа.Тип мьютекса, используемый не должен предоставить метод try_lock.Объекты типа condition_variable можно использовать только с мьютексом типа unique_lock<mutex>.Объекты этого типа могут быть быстрее, чем объектов типа condition_variable_any<unique_lock<mutex>>.
Чтобы ожидать событие, сначала блокируйте его, а затем вызовите один из методов wait с переменной условия.Вызов блокируется до wait других сигналов потока переменную условия.
Паразитные пробуждения возникают, когда потоки, ожидающие переменные условий разблокированными без соответствующих уведомлений.Для распознавания те паразитные пробуждения код ожидает условие для освобождения true должен явно проверить это условие, когда код возврата из функции ожидания.Обычно это делается с помощью цикла; можно использовать этот цикл wait(unique_lock<mutex>& lock, Predicate pred) выполняется автоматически.
while (condition is false)
wait for condition variable;
Все классы condition_variable_any и condition_variable имеют 3 метода, ожидающие условие.
wait ожидает неограниченный период времени.
wait_until дождитесь указанного объекта time.
wait_for ожидает указанный объект time interval.
Каждый из этих методов имеет перегруженные версии 2.Один - просто ожидает и может проспать вверх паразитно.Другой принимает дополнительный аргумент шаблона, который определяет предикат.Метод не возвращает до тех пор, пока не будет предикату true.
Каждый класс также содержит 2 метода, используются для оповещения переменную условия, ее состояние true.
notify_one выводит вверх по одному из потоков, ожидающий переменную условия.
notify_all выводит вверх по всем потоки, ожидающие переменную условия.