Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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.