Compartir vía


reader_writer_lock (Clase)

Un bloqueo de lectura o escritura basado en cola, con preferencia del sistema de escritura y con giro solo local. El bloqueo permite el acceso primero en entrar, primero en salir (FIFO) a los sistemas de escritura y lectores agotados bajo una carga continua de sistemas de escritura.

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 lector-escritor como escritor.
lock_read Adquiere el bloqueo lector-escritor como escritor. Si hay escritores, los lectores activos tienen que esperar hasta que terminen. El lector simplemente registra un interés en el bloqueo 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 escritor sin bloquear.
unlock 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

lock

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 en una excepción.

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 encadenados para que un escritor que salga del bloqueo libere el siguiente escritor en línea.

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

lock_read

Adquiere el bloqueo lector-escritor como escritor. Si hay escritores, los lectores activos tienen que esperar hasta que terminen. El lector simplemente registra un interés en el bloqueo 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 manera segura en una excepción.

Si hay escritores esperando el bloqueo, el lector esperará hasta que todos los escritores en línea hayan adquirido y liberado el bloqueo. Este bloqueo está sesgado hacia los escritores y puede privar a los lectores bajo una carga continua de escritores.

reader_writer_lock

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 ya no se retenga el bloqueo cuando se ejecute el destructor. Permitir que se destruya el bloqueo lector-escritor con el bloqueo todavía retenido genera un comportamiento no definido.

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 un escritor. Si otro subproceso 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 como escritor 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 va a 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 escritor 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 el bloqueo, la liberación del bloqueo siempre irá al siguiente escritor en orden FIFO. Este bloqueo está sesgado hacia los escritores y puede privar a los lectores bajo una carga continua de escritores.

Consulte también

concurrency (espacio de nombres)
critical_section (clase)