Partilhar via


reader_writer_lock Classe

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.

Consulte também

concorrência Namespace
critical_section Classe