Класс reader_writer_lock
Блокировка чтения или записи на основе очередей с предпочтением записи только с локальным вращением. Блокировка предоставляет модулям записи доступ в порядке поступления и блокирует доступ модулей чтения при постоянной нагрузке модулей записи.
Синтаксис
class reader_writer_lock;
Участники
Открытые классы
Имя | Описание |
---|---|
Класс reader_writer_lock::scoped_lock | Исключение безопасной оболочки RAII, которую можно использовать для получения reader_writer_lock объектов блокировки в качестве средства записи. |
Класс reader_writer_lock::scoped_lock_read | Исключение безопасной оболочки RAII, которую можно использовать для получения reader_writer_lock объектов блокировки в качестве средства чтения. |
Открытые конструкторы
Имя | Описание |
---|---|
reader_writer_lock | Создает новый объект reader_writer_lock . |
Деструктор ~reader_writer_lock | Уничтожает reader_writer_lock объект. |
Открытые методы
Имя | Описание |
---|---|
lock | Получает блокировку средства чтения и записи в качестве средства записи. |
lock_read | Получает блокировку средства чтения и записи в качестве читателя. Если есть писатели, активные читатели должны ждать, пока они не будут выполнены. Читатель просто регистрирует интерес к блокировке и ожидает, чтобы записи отпустит его. |
try_lock | Пытается получить блокировку средства чтения в качестве средства записи без блокировки. |
try_lock_read | Пытается получить блокировку средства чтения в качестве средства чтения без блокировки. |
unlock | Разблокирует блокировку средства чтения и записи на основе того, кто заблокирует его, читатель или средство записи. |
Замечания
Дополнительные сведения см. в разделе "Структуры данных синхронизации".
Иерархия наследования
reader_writer_lock
Требования
Заголовок: concrt.h
Пространство имен: concurrency
lock
Получает блокировку средства чтения и записи в качестве средства записи.
void lock();
Замечания
Часто безопаснее использовать конструкцию scoped_lock для получения и освобождения reader_writer_lock
объекта в качестве модуля записи в безопасном режиме.
После того как средство записи пытается получить блокировку, все будущие читатели будут блокироваться до тех пор, пока средства записи не получат и не снимут блокировку. Эта блокировка предвзята к писателям и может голодать читателей под непрерывной нагрузкой писателей.
Записи связаны таким образом, чтобы модуль записи вышел из блокировки, освобождает следующий модуль записи в строке.
Если блокировка уже хранится в контексте вызова, создается исключение improper_lock .
lock_read
Получает блокировку средства чтения и записи в качестве читателя. Если есть писатели, активные читатели должны ждать, пока они не будут выполнены. Читатель просто регистрирует интерес к блокировке и ожидает, чтобы записи отпустит его.
void lock_read();
Замечания
Часто безопаснее использовать конструкцию scoped_lock_read для получения и освобождения reader_writer_lock
объекта в качестве средства чтения в безопасном режиме.
Если есть записи, ожидающие блокировки, читатель будет ждать, пока все записи в строке приобрели и выпустили блокировку. Эта блокировка предвзята к писателям и может голодать читателей под непрерывной нагрузкой писателей.
reader_writer_lock
Создает новый объект reader_writer_lock
.
reader_writer_lock();
~reader_writer_lock
Уничтожает reader_writer_lock
объект.
~reader_writer_lock();
Замечания
Ожидается, что блокировка больше не хранится при запуске деструктора. Если блокировка записи чтения будет деструктировать с блокировкой, она по-прежнему содержит результаты в неопределенном поведении.
Класс reader_writer_lock::scoped_lock
Исключение безопасной оболочки RAII, которую можно использовать для получения reader_writer_lock
объектов блокировки в качестве средства записи.
class scoped_lock;
scoped_lock::scoped_lock
scoped_lock
Создает объект и получает reader_writer_lock
объект, _Reader_writer_lock
переданный в параметре в качестве модуля записи. Если блокировка удерживается другим потоком, этот вызов блокируется.
explicit _CRTIMP scoped_lock(reader_writer_lock& _Reader_writer_lock);
Параметры
_Reader_writer_lock
Объект reader_writer_lock
, который требуется получить в качестве модуля записи.
scoped_lock::~scoped_lock
Уничтожает объект и освобождает блокировку reader_writer_lock
, предоставленную в его конструкторе.
~scoped_lock();
Класс reader_writer_lock::scoped_lock_read
Исключение безопасной оболочки RAII, которую можно использовать для получения reader_writer_lock
объектов блокировки в качестве средства чтения.
class scoped_lock_read;
scoped_lock_read::scoped_lock_read
scoped_lock_read
Создает объект и получает reader_writer_lock
объект, _Reader_writer_lock
переданный в параметре в качестве средства чтения. Если блокировка удерживается другим потоком в качестве модуля записи или ожидающих записи, этот вызов блокируется.
explicit _CRTIMP scoped_lock_read(reader_writer_lock& _Reader_writer_lock);
Параметры
_Reader_writer_lock
Объект reader_writer_lock
, который требуется получить в качестве средства чтения.
reader_writer_lock::scoped_lock_read::~scoped_lock_read деструктор
Уничтожает объект и освобождает блокировку scoped_lock_read
, предоставленную в его конструкторе.
~scoped_lock_read();
try_lock
Пытается получить блокировку средства чтения в качестве средства записи без блокировки.
Синтаксис
bool try_lock();
Возвращаемое значение
Если блокировка была приобретена, значение true
; в противном случае — значение false
.
try_lock_read
Пытается получить блокировку средства чтения в качестве средства чтения без блокировки.
bool try_lock_read();
Возвращаемое значение
Если блокировка была приобретена, значение true
; в противном случае — значение false
.
разблокировано
Разблокирует блокировку средства чтения и записи на основе того, кто заблокирует его, читатель или средство записи.
void unlock();
Замечания
Если есть записи, ожидающие блокировки, выпуск блокировки всегда будет переходить к следующему записи в порядке FIFO. Эта блокировка предвзята к писателям и может голодать читателей под непрерывной нагрузкой писателей.