#include <cond_var.hpp>
Поскольку в Win32, в отличии от Posix, нет понятия condition variable, данная реализация использует синхронизирующие объекты Event операционной системы Win32.
Для того, чтобы проигнорировать наступление события если нет ожидающих нитей, используется PulseEvent.
Открытые члены | |
| void | wait (_os_mutex_sem_t &mutex) |
| Ожидание наступления события. | |
| void | notify_one () |
| Нотификация только одной ожидающей нити. | |
| void | notify_all () |
| Нотификация только всех ожидающих нитей. | |
| _os_cond_var_t () | |
| Создает неименованный семафор. | |
| void | wait (_os_mutex_sem_t &sem) |
| Ожидание наступления события. | |
| void | notify_one () |
| Нотификация только одной ожидающей нити. | |
| void | notify_all () |
| Нотификация всех ожидающих нитей. | |
Закрытые члены | |
| void | do_notify () |
| Выполнение основных действий по генерации нотификации. | |
Закрытые данные | |
| pthread_cond_t | m_event |
| Событие. | |
| _os_mutex_sem_t | m_self_lock |
| Собственный замок объекта. | |
| HANDLE | m_notify_event |
| Событие с ручным сбросом, которое выставляется в методах notify_all(), notify_one(). | |
| HANDLE | m_notify_processed |
| Событие с ручным сбросом, которое выставляется в методе wait() для установления признака, что нотификация отработала. | |
| unsigned long | m_awaiting |
| Количество нитей, вошедших в метод wait(). | |
| unsigned long | m_to_wake |
| Количество нитей, которым разрешено обработать нотификацию. | |
|
|
Собственный замок объекта. Предохраняет значения m_awaiting, m_to_wake в методе wait(). |
|
|
Количество нитей, которым разрешено обработать нотификацию. Выставляется в методах notify_all(), notify_one(). |
1.3.7