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.