Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Um bloqueio de leitor-escritor baseado numa fila de preferência de escritor com rotação local apenas. O bloqueio concede acesso de primeiro a entrar - primeiro a sair (FIFO) aos escritores e penaliza os leitores quando há uma carga contínua de escritores.
Sintaxe
class reader_writer_lock;
Membros
Aulas Públicas
| Nome | Description |
|---|---|
| reader_writer_lock::scoped_lock Classe | Um wrapper RAII seguro para exceções que pode ser usado para adquirir reader_writer_lock objetos de bloqueio como escritor. |
| reader_writer_lock::scoped_lock_read Classe | Um wrapper RAII seguro para exceções, utilizado para adquirir reader_writer_lock objetos de bloqueio em modo de leitura. |
Construtores Públicos
| Nome | Description |
|---|---|
| reader_writer_lock | Constrói um novo reader_writer_lock objeto. |
| ~reader_writer_lock Destrutor | Destrói o reader_writer_lock objeto. |
Métodos Públicos
| Nome | Description |
|---|---|
| bloqueio | Adquire o bloqueio leitor-escritor como escritor. |
| lock_read | Adquira o bloqueio leitor-escritor na qualidade de leitor. Se houver escritores, os leitores ativos têm de esperar até terminarem. O leitor simplesmente manifesta interesse pela fechadura e espera que os escritores a libertem. |
| try_lock | Tenta adquirir o domínio do leitor-escritor como escritor sem bloqueios. |
| try_lock_read (tentar_bloquear_leitura) | Tenta obter o bloqueio do leitor-escritor como leitor sem bloqueio. |
| desbloquear | Desbloqueia o bloqueio leitor-escritor com base em quem o bloqueou, leitor ou escritor. |
Observações
Para obter mais informações, consulte Estruturas de dados de sincronização.
Hierarquia de herança
reader_writer_lock
Requerimentos
Cabeçalho: concrt.h
Namespace: simultaneidade
bloquear
Adquire o bloqueio leitor-escritor como escritor.
void lock();
Observações
É frequentemente mais seguro utilizar a estrutura scoped_lock para adquirir e lançar um reader_writer_lock objeto como escritor de forma segura.
Depois de um escritor tentar adquirir o bloqueio, qualquer leitor futuro ficará bloqueado até que os escritores tenham conseguido adquirir e libertar o bloqueio com sucesso. Este bloqueio é tendencioso a favor dos escritores e pode prejudicar os leitores sob uma carga contínua de escritores.
Os escritores estão acorrentados para que um escritor que sai do cadeado liberte o escritor seguinte na fila.
Se o bloqueio já estiver detido pelo contexto de chamada, será lançada uma exceção improper_lock .
bloqueio_leitura
Adquire o bloqueio leitor-escritor como leitor. Se houver escritores, os leitores ativos têm de esperar até terminarem. O leitor simplesmente manifesta interesse pela fechadura e espera que os escritores a libertem.
void lock_read();
Observações
É frequentemente mais seguro utilizar a estrutura scoped_lock_read para adquirir e libertar um reader_writer_lock objeto como leitor de forma segura contra exceções.
Se houver escritores à espera do bloqueio, o leitor esperará até que todos os escritores na fila tenham adquirido e libertado o bloqueio. Este bloqueio é tendencioso a favor dos escritores e pode privar os leitores sob uma carga contínua de escritores.
bloqueio de leitor/escritor
Constrói um novo reader_writer_lock objeto.
reader_writer_lock();
~reader_writer_lock
Destrói o reader_writer_lock objeto.
~reader_writer_lock();
Observações
Espera-se que o bloqueio já não seja mantido quando o destruidor está em funcionamento. Permitir que o bloqueio de leitura e escrita seja destruído com o bloqueio ainda mantido resulta em comportamentos indefinidos.
reader_writer_lock::scoped_lock Turma
Um wrapper RAII seguro para exceções que pode ser usado para adquirir reader_writer_lock objetos de bloqueio como escritor.
class scoped_lock;
scoped_lock::scoped_lock
Constrói um objeto scoped_lock e adquire o objeto reader_writer_lock passado como um gravador no parâmetro _Reader_writer_lock. Se o bloqueio for mantido por outro thread, esta chamada ficará bloqueada.
explicit _CRTIMP scoped_lock(reader_writer_lock& _Reader_writer_lock);
Parâmetros
bloqueio de leitor/escritor
O reader_writer_lock objetivo a adquirir como escritor.
scoped_lock::~scoped_lock
Destrói um reader_writer_lock objeto e liberta o bloqueio fornecido no seu construtor.
~scoped_lock();
reader_writer_lock::scoped_lock_read Turma
Um wrapper RAII seguro para exceções, utilizado para adquirir reader_writer_lock objetos de bloqueio em modo de leitura.
class scoped_lock_read;
scoped_lock_read::scoped_lock_read
Constrói um scoped_lock_read objeto e adquire o reader_writer_lock objeto passado no _Reader_writer_lock parâmetro como leitor. Se o bloqueio for mantido por outra thread como escritor ou houver escritores pendentes, esta chamada ficará bloqueada.
explicit _CRTIMP scoped_lock_read(reader_writer_lock& _Reader_writer_lock);
Parâmetros
_Reader_writer_lock
O reader_writer_lock objeto a adquirir como leitor.
reader_writer_lock::scoped_lock_read::~scoped_lock_read Destrutor
Destrói um scoped_lock_read objeto e liberta o bloqueio fornecido no seu construtor.
~scoped_lock_read();
try_lock
Tenta adquirir o domínio do leitor-escritor como escritor sem bloqueios.
Sintaxe
bool try_lock();
Valor de retorno
Se o cadeado foi adquirido, o valor true; caso contrário, o valor false.
tentar_bloquear_leitura
Tenta obter o bloqueio do leitor-escritor como leitor sem bloqueio.
bool try_lock_read();
Valor de retorno
Se o cadeado foi adquirido, o valor true; caso contrário, o valor false.
desbloquear
Desbloqueia o bloqueio leitor-escritor com base em quem o bloqueou, leitor ou escritor.
void unlock();
Observações
Se houver escritores à espera do bloqueio, a libertação do bloqueio será sempre para o próximo escritor por ordem FIFO. Este bloqueio é tendencioso a favor dos escritores e pode privar os leitores sob uma carga contínua de escritores.