#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(). |