Класс 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