Compartilhar via


Classe reader_writer_lock

Um bloqueio de leitor-escritor baseado em fila com preferência para escritores com giro apenas local. O bloqueio concede acesso FIFO (first in - first out, primeiro a entrar, primeiro a sair) aos escritores e impede o acesso dos leitores sob uma carga contínua de escritores.

Sintaxe

class reader_writer_lock;

Membros

Classes públicas

Nome Descrição
reader_writer_lock::scoped_lock Classe Um wrapper RAII que trata exceções de forma segura, que pode ser usado para adquirir objetos de bloqueio reader_writer_lock como escritor.
reader_writer_lock::scoped_lock_read Classe Um wrapper RAII seguro para exceções que pode ser usado para adquirir objetos reader_writer_lock de bloqueio como leitor.

Construtores públicos

Nome Descrição
reader_writer_lock Constrói um novo objeto reader_writer_lock.
Destrutor ~reader_writer_lock Destrói o objeto reader_writer_lock.

Métodos públicos

Nome Descrição
lock Adquire-se o bloqueio leitor-escritor como escritor.
lock_read Adquire o bloqueio leitor-gravador como um leitor. Se houver escritores, os leitores ativos terão que esperar até que eles terminem. O leitor simplesmente registra um interesse no travamento e aguarda os escritores liberá-lo.
try_lock Tenta adquirir o bloqueio leitor-gravador como um gravador sem bloqueio.
try_lock_read Tenta adquirir o bloqueio leitor-gravador como um leitor sem bloqueio.
desbloquear Desbloqueia o bloqueio leitor-gravador com base em quem o bloqueou, leitor ou gravador.

Comentários

Para obter mais informações, confira Estrutura de dados de sincronização.

Hierarquia de herança

reader_writer_lock

Requisitos

Cabeçalho: concrt.h

Namespace: simultaneidade

bloquear

Adquire o bloqueio leitor-escritor para escrita.

void lock();

Comentários

Geralmente, é mais seguro utilizar a construção scoped_lock para adquirir e liberar um objeto reader_writer_lock como um gravador de uma maneira segura de exceção.

Depois que um escritor tentar adquirir o lock, quaisquer leitores serão bloqueados até que os escritores tenham adquirido e liberado o lock com êxito. Esse bloqueio é tendencioso em relação aos gravadores e pode deixar os leitores famintos sob uma carga contínua de gravadores.

Os escritores são encadeados de modo que um escritor ao liberar-se do bloqueio libera o próximo escritor seguinte.

Se o bloqueio já for mantido pelo contexto de chamada, uma exceção improper_lock será gerada.

lock_read (bloqueio de leitura)

Adquire o bloqueio leitor-gravador como um leitor. Se houver escritores, os leitores ativos terão que esperar até que eles terminem. O leitor simplesmente registra um interesse no travamento e aguarda os escritores liberá-lo.

void lock_read();

Comentários

Geralmente, é mais seguro utilizar a construção scoped_lock_read para adquirir e liberar um objeto reader_writer_lock como um leitor de maneira segura em relação a exceções.

Se houver escritores esperando para acessar o bloqueio, o leitor aguardará até que todos os escritores na fila tenham adquirido e liberado o bloqueio. Esse bloqueio é tendencioso em relação aos escritores e pode impedir os leitores de operar sob carga contínua de escrita.

bloqueio de leitura_escrita

Constrói um novo objeto reader_writer_lock.

reader_writer_lock();

~ reader_writer_lock

Destrói o objeto reader_writer_lock.

~reader_writer_lock();

Comentários

Espera-se que o bloqueio deixe de ser mantido quando o destruidor for executado. Permitir que o bloqueio de leitura/escrita seja destruído, com o bloqueio ainda sendo mantido, resulta em um comportamento indefinido.

reader_writer_lock::scoped_lock Classe

Um wrapper RAII que trata exceções de forma segura, que pode ser usado para adquirir objetos de bloqueio reader_writer_lock como escritor.

class scoped_lock;

scoped_lock::scoped_lock

Constrói um objeto scoped_lock e adquire o objeto reader_writer_lock passado no parâmetro _Reader_writer_lock como um gravador. Se o bloqueio for mantido por outro thread, essa chamada será bloqueada.

explicit _CRTIMP scoped_lock(reader_writer_lock& _Reader_writer_lock);

Parâmetros

_Reader_writer_lock
O objeto reader_writer_lock a ser adquirido como escritor.

scoped_lock::~scoped_lock

Destrói um objeto reader_writer_lock e libera o bloqueio fornecido em seu construtor.

~scoped_lock();

reader_writer_lock::scoped_lock_read classe

Um wrapper RAII seguro para exceções que pode ser usado para adquirir objetos reader_writer_lock de bloqueio como leitor.

class scoped_lock_read;

scoped_lock_read::scoped_lock_read

Constrói um objeto scoped_lock_read e adquire o objeto reader_writer_lock passado no parâmetro _Reader_writer_lock como um leitor. Se a trava for mantida por outro thread como um escritor ou houver escritores pendentes, essa chamada será bloqueada.

explicit _CRTIMP scoped_lock_read(reader_writer_lock& _Reader_writer_lock);

Parâmetros

_Reader_writer_lock
O objeto reader_writer_lock para ser utilizado como um leitor.

reader_writer_lock::scoped_lock_read::~scoped_lock_read Destruidor

Destrói um objeto scoped_lock_read e libera o bloqueio fornecido em seu construtor.

~scoped_lock_read();

try_lock

Tenta adquirir o bloqueio leitor-gravador como um gravador sem bloqueio.

Sintaxe

bool try_lock();

Valor retornado

Se o bloqueio foi adquirido, o valor true, caso contrário, o valor false.

try_lock_read (tentar_bloquear_leitura)

Tenta adquirir o bloqueio leitor-gravador como um leitor sem bloqueio.

bool try_lock_read();

Valor retornado

Se o bloqueio foi adquirido, o valor true, caso contrário, o valor false.

desbloquear

Desbloqueia o bloqueio leitor-gravador com base em quem o bloqueou, leitor ou gravador.

void unlock();

Comentários

Se houver escritores esperando no bloqueio, a liberação do bloqueio sempre irá para o próximo escritor na ordem FIFO. Esse bloqueio é tendencioso em relação aos gravadores e pode deixar os leitores famintos sob uma carga contínua de gravadores.

Confira também

Namespace de concorrência
Classe critical_section