Namespaces
Variants

std:: shared_timed_mutex

From cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
shared_timed_mutex
(C++14)
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
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

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;
}