std:: shared_timed_mutex
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Exclusive locking | ||||
| Shared locking | ||||
|
Definido en el encabezado
<shared_mutex>
|
||
|
class
shared_timed_mutex
;
|
(desde C++14) | |
La clase
shared_timed_mutex
es un primitivo de sincronización que puede utilizarse para proteger datos compartidos de ser accedidos simultáneamente por múltiples hilos. A diferencia de otros tipos de mutex que facilitan acceso exclusivo, un
shared_timed_mutex
tiene dos niveles de acceso:
- exclusive - solo un hilo puede poseer el mutex.
- shared - varios hilos pueden compartir la propiedad del mismo mutex.
Los mutex compartidos generalmente se utilizan en situaciones en las que múltiples lectores pueden acceder al mismo recurso simultáneamente sin causar carreras de datos, pero solo un escritor puede hacerlo.
De manera similar a
timed_mutex
,
shared_timed_mutex
proporciona la capacidad de intentar reclamar la propiedad de un
shared_timed_mutex
con un tiempo de espera mediante las funciones miembro
try_lock_for()
,
try_lock_until()
,
try_lock_shared_for()
,
try_lock_shared_until()
.
La clase
shared_timed_mutex
satisface todos los requisitos de
SharedTimedMutex
y
StandardLayoutType
.
Contenidos |
Funciones miembro
|
construye el mutex
(función miembro pública) |
|
|
destruye el mutex
(función miembro pública) |
|
|
operator=
[deleted]
|
no asignable por copia
(función miembro pública) |
Bloqueo exclusivo |
|
|
bloquea el mutex, se bloquea si el mutex no está disponible
(función miembro pública) |
|
|
intenta bloquear el mutex, retorna si el mutex no está disponible
(función miembro pública) |
|
|
intenta bloquear el mutex, retorna si el mutex ha estado
no disponible durante el tiempo de espera especificado (función miembro pública) |
|
|
intenta bloquear el mutex, retorna si el mutex ha estado
no disponible hasta que se alcanza el punto temporal especificado (función miembro pública) |
|
|
desbloquea el mutex
(función miembro pública) |
|
Bloqueo compartido |
|
|
bloquea el mutex para propiedad compartida, se bloquea si el mutex no está disponible
(función miembro pública) |
|
|
intenta bloquear el mutex para propiedad compartida, retorna si el mutex no está disponible
(función miembro pública) |
|
|
intenta bloquear el mutex para propiedad compartida, retorna si el mutex ha estado
no disponible durante el tiempo de espera especificado (función miembro pública) |
|
|
intenta bloquear el mutex para propiedad compartida, retorna si el mutex ha estado
no disponible hasta que se alcanza el punto temporal especificado (función miembro pública) |
|
|
desbloquea el mutex (propiedad compartida)
(función miembro pública) |
|
Notas
| Macro de prueba de características | Valor | Estándar | Característica |
|---|---|---|---|
__cpp_lib_shared_timed_mutex
|
201402L
|
(C++14) |
std::shared_timed_mutex
|
Ejemplo
|
Esta sección está incompleta
Razón: construir un ejemplo motivador |
Un operador de asignación de copia para una clase que contiene recursos que pueden manejar múltiples lectores, pero solo un escritor.
#include <mutex> #include <shared_mutex> class R { mutable std::shared_timed_mutex mut; /* data */ public: R& operator=(const R& other) { // requires exclusive ownership to write to *this std::unique_lock<std::shared_timed_mutex> lhs(mut, std::defer_lock); // requires shared ownership to read from other std::shared_lock<std::shared_timed_mutex> rhs(other.mut, std::defer_lock); std::lock(lhs, rhs); /* assign data */ return *this; } }; int main() { R r; }