Титульная страница | Пространства имен | Алфавитный указатель | Классы | Файлы | Члены пространства имен | Члены классов | Описания | Примеры

Класс threads_1::mrd_sem_t

#include <threads.hpp>

Полный список членов класса


Подробное описание

Синхронизирующий объект "много читателей, один писатель".

Позволяет нескольким нитям одновременно установить блокировку в режиме read-only. Только одна нить может установить блокировку в режиме read-write.

Особенность работы.
Пока нет "писателя" все "читатели" захватывают семафор без ограничений. Т.е. очередной "читатель" просто увеличивает счетчик блокировок семафора и продолжает свою работу. Как только появляется "писатель" в семафоре запрешаются новые блокировки. И даже новые "читатели" будут ожидать полного освобождения семафора. В результате к моменту освобождения семафора может оказаться, что семафора ожидает несколько "читателей" и несколько "писателей" одновременно. Класс mrd_sem_t не определяет порядка захвата семафора в этом случае. Операционная система решает, какая из ожидающих нитей первая захватит семафор. Если такой нитью окажется "читатель", то может оказаться так, что все ожидавшие "читатели" захватят семафор, а первая из проснувшихся нитей "писателей" запретит блокировки семафора. И нити "писатели" вновь будут ждать освобождения семафора.
Примеры:

sample/mrd_sem/main.cpp.


Открытые члены

void rd_lock ()
 Захват семафора в режиме чтения.

void wr_lock ()
 Захват семафора в режиме записи.

void release ()
 Освобождение семафора.


Закрытые данные

mutex_sem_t m_lock
 Замок самого семафора.

cond_var_t m_unlocked_event
 Событие, означающее полное освобождение семафора.

unsigned long m_lock_count
 Счетчик захватов семафора.

bool m_is_lock_enabled
 Разрешены ли захваты семафора без ожидания его полного освобождения.


Данные класса

bool threads_1::mrd_sem_t::m_is_lock_enabled [private]
 

Разрешены ли захваты семафора без ожидания его полного освобождения.

Принимает значение false, если производится попытка захватить семафор в режиме записи.

mutex_sem_t threads_1::mrd_sem_t::m_lock [private]
 

Замок самого семафора.

Используется для защиты внутренних структур объекта-семафора.

unsigned long threads_1::mrd_sem_t::m_lock_count [private]
 

Счетчик захватов семафора.

Не может иметь значение, большее 1, если семафор захвачен в режиме записи.


Объявления и описания членов классов находятся в файлах:
Документация по threads_1. Последние изменения: Wed Aug 4 06:46:01 2004. Создано системой doxygen 1.3.7
Hosted by uCoz