Класс reader_writer_lockreader_writer_lock Class

Блокировка чтения или записи на основе очередей с предпочтением записи только с локальным вращением.A writer-preference queue-based reader-writer lock with local only spinning. Блокировка предоставляет модулям записи доступ в порядке поступления и блокирует доступ модулей чтения при постоянной нагрузке модулей записи.The lock grants first in - first out (FIFO) access to writers and starves readers under a continuous load of writers.

СинтаксисSyntax

class reader_writer_lock;

ЧленыMembers

Открытые классыPublic Classes

ИмяName ОписаниеDescription
Класс reader_writer_lock::scoped_lockreader_writer_lock::scoped_lock Class Потокобезопасная оболочка RAII, которую можно использовать для получения reader_writer_lock объектов блокировки в качестве модуля записи.An exception safe RAII wrapper that can be used to acquire reader_writer_lock lock objects as a writer.
Класс reader_writer_lock::scoped_lock_readreader_writer_lock::scoped_lock_read Class Потокобезопасная оболочка RAII, которую можно использовать для получения reader_writer_lock объектов блокировки в качестве читателя.An exception safe RAII wrapper that can be used to acquire reader_writer_lock lock objects as a reader.

Открытые конструкторыPublic Constructors

nameName ОписаниеDescription
reader_writer_lockreader_writer_lock Создает новый объект reader_writer_lock.Constructs a new reader_writer_lock object.
Деструктор ~ reader_writer_lock~reader_writer_lock Destructor Уничтожает reader_writer_lock объект.Destroys the reader_writer_lock object.

Открытые методыPublic Methods

nameName ОписаниеDescription
locklock Получает блокировку чтения-записи в качестве модуля записи.Acquires the reader-writer lock as a writer.
lock_readlock_read Получает блокировку чтения-записи в качестве читателя.Acquires the reader-writer lock as a reader. При наличии модулей записи активные модули чтения должны подождать, пока они не будут выполнены.If there are writers, active readers have to wait until they are done. Читатель просто регистрирует интерес в блокировке и ждет, пока модули записи его освобождают.The reader simply registers an interest in the lock and waits for writers to release it.
try_locktry_lock Пытается получить блокировку чтения-записи в качестве модуля записи без блокировки.Attempts to acquire the reader-writer lock as a writer without blocking.
try_lock_readtry_lock_read Пытается получить блокировку чтения-записи в качестве читателя без блокировки.Attempts to acquire the reader-writer lock as a reader without blocking.
блокированunlock Разблокирует блокировку чтения-записи в зависимости от того, кто ее блокировал, читатель или модуль записи.Unlocks the reader-writer lock based on who locked it, reader or writer.

КомментарииRemarks

Дополнительные сведения см. в разделе структуры данных синхронизации.For more information, see Synchronization Data Structures.

Иерархия наследованияInheritance Hierarchy

reader_writer_lock

ТребованияRequirements

Заголовок: ConcRT. hHeader: concrt.h

Пространство имен: параллелизмNamespace: concurrency

скрытьlock

Получает блокировку чтения-записи в качестве модуля записи.Acquires the reader-writer lock as a writer.

void lock();

КомментарииRemarks

Часто бывает безопаснее использовать конструкцию scoped_lock для получения и освобождения reader_writer_lock объекта в качестве модуля записи в безопасном виде исключения.It is often safer to utilize the scoped_lock construct to acquire and release a reader_writer_lock object as a writer in an exception safe way.

После того как средство записи пытается получить блокировку, все будущие читатели будут блокироваться до тех пор, пока средства записи не получат и не снимут блокировку.After a writer attempts to acquire the lock, any future readers will block until the writers have successfully acquired and released the lock. Эта блокировка перемещается на модули записи и может существенно замедлить считывание данных при непрерывной нагрузке модулей записи.This lock is biased towards writers and can starve readers under a continuous load of writers.

Модули записи помещаются в цепочку таким образом, что модуль записи, завершающий блокировку, освобождает следующий модуль записи в строке.Writers are chained so that a writer exiting the lock releases the next writer in line.

Если блокировка уже удерживается вызывающим контекстом, будет выдано исключение improper_lock .If the lock is already held by the calling context, an improper_lock exception will be thrown.

lock_readlock_read

Получает блокировку чтения-записи в качестве читателя.Acquires the reader-writer lock as a reader. При наличии модулей записи активные модули чтения должны подождать, пока они не будут выполнены.If there are writers, active readers have to wait until they are done. Читатель просто регистрирует интерес в блокировке и ждет, пока модули записи его освобождают.The reader simply registers an interest in the lock and waits for writers to release it.

void lock_read();

КомментарииRemarks

Часто безопаснее использовать конструкцию scoped_lock_read для получения и освобождения reader_writer_lock объекта в качестве читателя в безопасном для исключения виде.It is often safer to utilize the scoped_lock_read construct to acquire and release a reader_writer_lock object as a reader in an exception safe way.

Если имеются модули записи, ожидающие блокировки, модуль чтения будет ожидать, пока все модули записи в строке не будут получены и освобождены.If there are writers waiting on the lock, the reader will wait until all writers in line have acquired and released the lock. Эта блокировка перемещается на модули записи и может существенно замедлить считывание данных при непрерывной нагрузке модулей записи.This lock is biased towards writers and can starve readers under a continuous load of writers.

reader_writer_lockreader_writer_lock

Создает новый объект reader_writer_lock.Constructs a new reader_writer_lock object.

reader_writer_lock();

~ reader_writer_lock~reader_writer_lock

Уничтожает reader_writer_lock объект.Destroys the reader_writer_lock object.

~reader_writer_lock();

КомментарииRemarks

Ожидается, что блокировка больше не удерживается при выполнении деструктора.It is expected that the lock is no longer held when the destructor runs. Разрешение блокировки записи чтения на уничтожения с блокировкой по-прежнему приводит к неопределенному поведению.Allowing the reader writer lock to destruct with the lock still held results in undefined behavior.

Класс reader_writer_lock:: scoped_lockreader_writer_lock::scoped_lock Class

Потокобезопасная оболочка RAII, которую можно использовать для получения reader_writer_lock объектов блокировки в качестве модуля записи.An exception safe RAII wrapper that can be used to acquire reader_writer_lock lock objects as a writer.

class scoped_lock;

scoped_lock:: scoped_lockscoped_lock::scoped_lock

Создает scoped_lock объект и получает reader_writer_lock объект, переданный в _Reader_writer_lock параметре, в качестве модуля записи.Constructs a scoped_lock object and acquires the reader_writer_lock object passed in the _Reader_writer_lock parameter as a writer. Если блокировка удерживается другим потоком, этот вызов блокируется.If the lock is held by another thread, this call will block.

explicit _CRTIMP scoped_lock(reader_writer_lock& _Reader_writer_lock);

ПараметрыParameters

_Reader_writer_lock_Reader_writer_lock
reader_writer_lockОбъект, который требуется получить в качестве модуля записи.The reader_writer_lock object to acquire as a writer.

scoped_lock:: ~ scoped_lockscoped_lock::~scoped_lock

Уничтожает reader_writer_lock объект и освобождает блокировку, заданную в его конструкторе.Destroys a reader_writer_lock object and releases the lock supplied in its constructor.

~scoped_lock();

Класс reader_writer_lock:: scoped_lock_readreader_writer_lock::scoped_lock_read Class

Потокобезопасная оболочка RAII, которую можно использовать для получения reader_writer_lock объектов блокировки в качестве читателя.An exception safe RAII wrapper that can be used to acquire reader_writer_lock lock objects as a reader.

class scoped_lock_read;

scoped_lock_read:: scoped_lock_readscoped_lock_read::scoped_lock_read

Создает scoped_lock_read объект и получает reader_writer_lock объект, переданный в _Reader_writer_lock параметре, в качестве средства чтения.Constructs a scoped_lock_read object and acquires the reader_writer_lock object passed in the _Reader_writer_lock parameter as a reader. Если блокировка удерживается другим потоком в качестве модуля записи или ожидающих модулей записи, этот вызов блокируется.If the lock is held by another thread as a writer or there are pending writers, this call will block.

explicit _CRTIMP scoped_lock_read(reader_writer_lock& _Reader_writer_lock);

ПараметрыParameters

_Reader_writer_lock_Reader_writer_lock
reader_writer_lockОбъект, который требуется получить как средство чтения.The reader_writer_lock object to acquire as a reader.

Деструктор reader_writer_lock:: scoped_lock_read:: ~ scoped_lock_read reader_writer_lock::scoped_lock_read::~scoped_lock_read Destructor

Уничтожает scoped_lock_read объект и освобождает блокировку, заданную в его конструкторе.Destroys a scoped_lock_read object and releases the lock supplied in its constructor.

~scoped_lock_read();

try_locktry_lock

Пытается получить блокировку чтения-записи в качестве модуля записи без блокировки.Attempts to acquire the reader-writer lock as a writer without blocking.

СинтаксисSyntax

bool try_lock();

Возвращаемое значениеReturn Value

Значение, если блокировка была получена; в true противном случае — значение false .If the lock was acquired, the value true; otherwise, the value false.

try_lock_readtry_lock_read

Пытается получить блокировку чтения-записи в качестве читателя без блокировки.Attempts to acquire the reader-writer lock as a reader without blocking.

bool try_lock_read();

Возвращаемое значениеReturn Value

Значение, если блокировка была получена; в true противном случае — значение false .If the lock was acquired, the value true; otherwise, the value false.

блокированunlock

Разблокирует блокировку чтения-записи в зависимости от того, кто ее блокировал, читатель или модуль записи.Unlocks the reader-writer lock based on who locked it, reader or writer.

void unlock();

КомментарииRemarks

Если имеются модули записи, ожидающие блокировки, выпуск блокировки всегда будет переключаться к следующему модулю записи в порядке FIFO.If there are writers waiting on the lock, the release of the lock will always go to the next writer in FIFO order. Эта блокировка перемещается на модули записи и может существенно замедлить считывание данных при непрерывной нагрузке модулей записи.This lock is biased towards writers and can starve readers under a continuous load of writers.

См. также разделSee also

Пространство имен Concurrencyconcurrency Namespace
Класс critical_sectioncritical_section Class