Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Um bloqueio de leitor-gravador baseado em fila de preferência de gravador com a rotação local apenas. O bloqueio concede acesso FIFO (first in - first out, primeiro a entrar, primeiro a sair) a gravadores e priva os leitores de recursos sob uma carga contínua de gravadores.
Sintaxe
class reader_writer_lock;
Membros
Classes públicas
| Nome | Descrição |
|---|---|
| reader_writer_lock::scoped_lock Classe | Um wrapper RAII seguro de exceção que pode ser usado para adquirir objetos reader_writer_lock de bloqueio como gravador. |
| reader_writer_lock::scoped_lock_read Classe | Um wrapper RAII seguro de exceção que pode ser usado para adquirir objetos reader_writer_lock de bloqueio como um leitor. |
Construtores públicos
| Nome | Descrição |
|---|---|
| reader_writer_lock | Constrói um novo objeto reader_writer_lock. |
| Destruidor ~reader_writer_lock | Destrói o objeto reader_writer_lock. |
Métodos públicos
| Nome | Descrição |
|---|---|
| lock | Adquire o bloqueio leitor-gravador como um gravador. |
| lock_read | Adquire o bloqueio leitor-gravador como um leitor. Se houver escritores, os leitores ativos terão que esperar até que eles sejam feitos. O leitor simplesmente registra um interesse no bloqueio e aguarda os gravadores 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. |
| unlock | 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: concurrency
lock
Adquire o bloqueio leitor-gravador como um gravador.
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 gravador tentar adquirir o bloqueio, todos os futuros leitores serão bloqueados até que os gravadores tenham adquirido e liberado o bloqueio com êxito. Esse bloqueio é tendencioso em relação aos gravadores e pode deixar os leitores famintos sob uma carga contínua de gravadores.
Os gravadores são encadeados para que um gravador que saia do bloqueio libere o próximo gravador na linha.
Se o bloqueio já for mantido pelo contexto de chamada, uma exceção improper_lock será gerada.
lock_read
Adquire o bloqueio leitor-gravador como um leitor. Se houver escritores, os leitores ativos terão que esperar até que eles sejam feitos. O leitor simplesmente registra um interesse no bloqueio e aguarda os gravadores 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 uma maneira segura de exceção.
Se houver gravadores esperando no bloqueio, o leitor aguardará até que todos os gravadores na fila tenham adquirido e liberado o bloqueio. Esse bloqueio é tendencioso em relação aos gravadores e pode deixar os leitores famintos sob uma carga contínua de gravadores.
reader_writer_lock
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 do gravador do leitor seja destruído, com o bloqueio ainda mantido resulta em um comportamento indefinido.
reader_writer_lock::scoped_lock Classe
Um wrapper RAII seguro de exceção que pode ser usado para adquirir objetos reader_writer_lock de bloqueio como gravador.
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 um gravador.
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 de exceção que pode ser usado para adquirir objetos reader_writer_lock de bloqueio como um 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 o bloqueio for mantido por outro thread como um gravador ou houver gravadores 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 a ser adquirido 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
Tenta adquirir o bloqueio leitor-gravador como um leitor sem bloqueio.
bool try_lock_read();
Valor de retorno
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 gravadores esperando no bloqueio, a liberação do bloqueio sempre irá para o próximo gravador na ordem FIFO. Esse bloqueio é tendencioso em relação aos gravadores e pode deixar os leitores famintos sob uma carga contínua de gravadores.