Поделиться через


Класс 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. Эта блокировка предвзята к писателям и может голодать читателей под непрерывной нагрузкой писателей.

См. также

Пространство имен concurrency
Класс critical_section