Compartir a través de


reader_writer_lock (Clase)

Un bloqueo lector-escritor basado en cola con preferencia de escritor y con giro solo local. El bloqueo proporciona acceso primero en entrar, primero en salir (FIFO) a los escritores y priva a los lectores bajo una carga continua de escritores.

Sintaxis

class reader_writer_lock;

Miembros

Clases públicas

Nombre Descripción
Clase Reader_Writer_Lock::Scoped_Lock Un contenedor RAII seguro de excepciones que se puede usar para adquirir objetos de bloqueo reader_writer_lock como escritor.
Clase reader_writer_lock::scoped_lock_read Un contenedor RAII seguro de excepciones que se puede usar para adquirir objetos de bloqueo reader_writer_lock como lector.

Constructores públicos

Nombre Descripción
reader_writer_lock Construye un nuevo objeto reader_writer_lock.
~reader_writer_lock Destructor Destruye el objeto reader_writer_lock.

Métodos públicos

Nombre Descripción
lock Adquiere el bloqueo de lectura-escritura en modo escritor.
lock_read Adquiere el bloqueo lector-escritor como lector. Si hay escritores, los lectores activos tienen que esperar hasta que terminen. El lector simplemente registra un interés en el cerrojo y espera a que los escritores lo liberen.
try_lock Intenta adquirir el bloqueo lector-escritor como escritor sin bloquear.
try_lock_read Intenta adquirir el bloqueo lector-escritor como lector sin bloquear.
desbloquear Desbloquea el bloqueo lector-escritor en función de quién lo bloqueó, lector o escritor.

Comentarios

Para más información, consulte Estructuras de datos de sincronización.

Jerarquía de herencia

reader_writer_lock

Requisitos

Encabezado: concrt.h

Espacio de nombres: simultaneidad

cerradura

Adquiere el bloqueo lector-escritor como escritor.

void lock();

Comentarios

Por lo general, suele ser más seguro utilizar la construcción scoped_lock para adquirir y liberar un objeto reader_writer_lock como escritor de manera segura frente a excepciones.

Después de que un escritor intente adquirir el bloqueo, cualquier lector futuro se bloqueará hasta que los escritores hayan adquirido y liberado correctamente el bloqueo. Este bloqueo está sesgado hacia los escritores y puede privar a los lectores bajo una carga continua de escritores.

Los escritores están enlazados para que un escritor que salga del bloqueo libere al siguiente escritor en la fila.

Si el contexto de llamada ya retiene el bloqueo, se generará una excepción improper_lock.

lock_read

Adquiere el bloqueo lector-escritor como lector. Si hay escritores, los lectores activos tienen que esperar hasta que terminen. El lector simplemente registra un interés en el cerrojo y espera a que los escritores lo liberen.

void lock_read();

Comentarios

Por lo general, suele ser más seguro utilizar la construcción scoped_lock_read para adquirir y liberar un objeto reader_writer_lock como lector de forma segura ante excepciones.

Si hay escritores en espera del candado, el lector esperará hasta que todos los escritores en la cola hayan adquirido y liberado el candado. Este bloqueo está sesgado hacia los escritores y puede privar a los lectores bajo una carga continua de escritores.

bloqueo lector-escritor

Construye un nuevo objeto reader_writer_lock.

reader_writer_lock();

~reader_writer_lock

Destruye el objeto reader_writer_lock.

~reader_writer_lock();

Comentarios

Se espera que el bloqueo ya no se mantenga cuando se ejecute el destructor. Permitir la destrucción del bloqueo lector-escritor mientras el bloqueo todavía está mantenido genera un comportamiento indefinido.

clase reader_writer_lock::scoped_lock

Un contenedor RAII seguro de excepciones que se puede usar para adquirir objetos de bloqueo reader_writer_lock como escritor.

class scoped_lock;

scoped_lock::scoped_lock

Construye un objeto scoped_lock y adquiere el objeto reader_writer_lock pasado en el parámetro _Reader_writer_lock como escritor. Si otro hilo mantiene el bloqueo, esta llamada se bloqueará.

explicit _CRTIMP scoped_lock(reader_writer_lock& _Reader_writer_lock);

Parámetros

_Reader_writer_lock
El objeto reader_writer_lock que se va a adquirir como escritor.

scoped_lock::~scoped_lock

Destruye un objeto reader_writer_lock y libera el bloqueo proporcionado en su constructor.

~scoped_lock();

Clase "reader_writer_lock::scoped_lock_read"

Un contenedor RAII seguro de excepciones que se puede usar para adquirir objetos de bloqueo reader_writer_lock como lector.

class scoped_lock_read;

scoped_lock_read::scoped_lock_read

Construye un objeto scoped_lock_read y adquiere el objeto reader_writer_lock pasado en el parámetro _Reader_writer_lock como un lector. Si otro subproceso mantiene el bloqueo en modo de escritura o hay escritores pendientes, esta llamada se bloqueará.

explicit _CRTIMP scoped_lock_read(reader_writer_lock& _Reader_writer_lock);

Parámetros

_Reader_writer_lock
El objeto reader_writer_lock que se debe adquirir como lector.

reader_writer_lock::scoped_lock_read::~scoped_lock_read Destructor

Destruye un objeto scoped_lock_read y libera el bloqueo proporcionado en su constructor.

~scoped_lock_read();

try_lock

Intenta adquirir el bloqueo lector-escritor como escritor sin bloquear.

Sintaxis

bool try_lock();

Valor devuelto

Si se adquirió el bloqueo, el valor es true; de lo contrario, false.

try_lock_read

Intenta adquirir el bloqueo lector-escritor como lector sin bloquear.

bool try_lock_read();

Valor devuelto

Si se adquirió el bloqueo, el valor es true; de lo contrario, false.

desbloquear

Desbloquea el bloqueo lector-escritor en función de quién lo bloqueó, lector o escritor.

void unlock();

Comentarios

Si hay escritores esperando por el bloqueo, la liberación del mismo siempre se otorgará al siguiente escritor en el orden FIFO. Este bloqueo está sesgado hacia los escritores y puede privar a los lectores bajo una carga continua de escritores.

Consulte también

espacio de nombres de concurrencia
critical_section (clase)