![]() |
PIP 5.6.1
Platform-Independent Primitives
|
Переменная условия, используемая вместе с внешним PIMutex. Подробнее...
#include <piconditionvar.h>
Открытые члены | |
| PIConditionVariable () | |
| Создает переменную условия. | |
| virtual | ~PIConditionVariable () |
| Уничтожает переменную условия. | |
| void | notifyOne () |
| Пробуждает один ожидающий поток, если он есть. | |
| void | notifyAll () |
| Пробуждает все потоки, ожидающие на этой переменной. | |
| virtual void | wait (PIMutex &lk) |
| Ожидает уведомления, временно освобождая lk на время блокировки. | |
| virtual void | wait (PIMutex &lk, const std::function< bool()> &condition) |
| Ожидает, пока condition не станет истинным, повторно проверяя его после каждого пробуждения при заблокированном lk. Подробнее... | |
| virtual bool | waitFor (PIMutex &lk, PISystemTime timeout) |
Ожидает не дольше timeout и возвращает true, если пробуждение произошло до его истечения. | |
| virtual bool | waitFor (PIMutex &lk, PISystemTime timeout, const std::function< bool()> &condition) |
| Ожидает, пока condition не станет истинным или не истечет timeout. Подробнее... | |
Переменная условия, используемая вместе с внешним PIMutex.
|
virtual |
Ожидает, пока condition не станет истинным, повторно проверяя его после каждого пробуждения при заблокированном lk.
Выполнение текущего потока (который должен быть заблокирован с помощью lk методом PIMutex::lock()) приостанавливается до получения уведомления.
В момент блокировки потока функция автоматически вызывает lk.unlock() (PIMutex::unlock()), позволяя другим заблокированным потокам продолжить выполнение.
После получения уведомления (явного, от другого потока) функция разблокируется и вызывает lk.lock() (PIMutex::lock()), возвращая lk в то же состояние, в котором он находился при вызове функции. Затем функция завершается (обратите внимание, что эта последняя блокировка мьютекса может снова заблокировать поток перед возвратом).
Обычно функция пробуждается при вызове в другом потоке либо notifyOne(), либо notifyAll(). Однако некоторые реализации могут создавать ложные пробуждения без вызова любой из этих функций. Поэтому пользователи этой функции должны убедиться, что условие для возобновления выполнено.
Если указано condition, функция блокируется только если condition возвращает false, а уведомления могут разблокировать поток только когда оно станет true (что особенно полезно для проверки ложных пробуждений).
| lk | объект блокировки, используемый методом wait для защиты данных |
| condition | вызываемый объект или функция, не принимающая аргументов и возвращающая значение, которое может быть оценено как bool. Вызывается повторно, пока не примет значение true |
|
virtual |
Ожидает, пока condition не станет истинным или не истечет timeout.
Выполнение текущего потока (который должен быть заблокирован с помощью lk методом PIMutex::lock()) приостанавливается на время timeout, или до получения уведомления (в зависимости от того, что произойдет раньше).
В момент блокировки потока функция автоматически вызывает lk.unlock() (PIMutex::unlock()), позволяя другим заблокированным потокам продолжить выполнение.
После получения уведомления или истечения таймаута функция разблокируется и вызывает lk.lock() (PIMutex::lock()), возвращая lk в то же состояние, в котором он находился при вызове функции. Затем функция завершается (обратите внимание, что эта последняя блокировка мьютекса может снова заблокировать поток перед возвратом).
Обычно функция пробуждается при вызове в другом потоке либо notifyOne(), либо notifyAll(). Однако некоторые реализации могут создавать ложные пробуждения без вызова любой из этих функций. Поэтому пользователи этой функции должны убедиться, что условие для возобновления выполнено.
Если указано condition, функция блокируется только если condition возвращает false, а уведомления могут разблокировать поток только когда оно станет true (что особенно полезно для проверки ложных пробуждений).
| lk | объект блокировки, используемый методом wait для защиты данных |
| timeout | время ожидания |
| condition | вызываемый объект или функция, не принимающая аргументов и возвращающая значение, которое может быть оценено как bool. Вызывается повторно, пока не примет значение true |