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