Так же хранит признак необходимости завершения работы.
Предназначена для использования несколькими нитями одновременно.
Открытые типы | |
enum | { demand_extracted, shutting_down } |
Открытые члены | |
void | push (int priority, const so_4::rt::event_data_t &event) |
Поместить заявку в очередь. | |
int | pop (so_4::rt::event_data_t *&evt, size_t *remaining_demands_count=0) |
Взять первую заявку. | |
void | start () |
Сбросить признак необходимости завешения работы. | |
void | shutdown () |
Выставить признак необходимости завешения работы. | |
void | destroy_all_demands () |
очереди заявок. | |
Закрытые типы | |
typedef std::multimap< int, so_4::rt::event_data_t *, std::greater< int > > | demands_storage_t |
Тип списка приоритетных заявок. | |
Закрытые члены | |
void | cleanup_demands () |
Удаление всего содержимого m_demands. | |
Закрытые данные | |
so_4::mutex::mutex_sem_t | m_lock |
so_4::mutex::cond_var_t | m_not_empty |
demands_storage_t | m_demands |
Список заявок, упорядоченных по приоритету. | |
bool | m_shutdown |
|
Тип списка приоритетных заявок. Используется объект std::multimap, т.к. по стандарту C++ гарантируется, что в multimap сохраняется порядок занесения элементов с одинаковым значением ключа. |
|
|
|
очереди заявок.
|
|
Взять первую заявку. Первой заявкой является самая старая заявка с самым большим приоритетом. Если заявок в очереди нет, то текущая нить засыпает до появления заявок в очереди, либо до выставления признака завершения работы. Если заявка возвращается, то она должна быть уничтожена посредством оператора delete тем, кто извлек заявку из очереди.
|
|
Поместить заявку в очередь. В очереди создается объект demand_t. Расположение объекта в очереди определяется приоритетом и возрастом. Добавляемый объект окажется самым последним объектом среди заявок своего приоритета (поскольку он самый молодой). |
|
Сбросить признак необходимости завешения работы. Должен вызываться при каждом запуске рабочей нити, т.к. после предыдущего останова рабочей нити остается выставленным признак необходимости завершения работы. |