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
Défini dans l'en-tête <shared_mutex>
class shared_timed_mutex ;
(depuis C++14)

La classe shared_timed_mutex est un primitif de synchronisation qui peut être utilisé pour protéger des données partagées contre un accès simultané par plusieurs threads. Contrairement aux autres types de mutex qui facilitent l'accès exclusif, un shared_timed_mutex possède deux niveaux d'accès :

  • exclusive - un seul thread peut posséder le mutex.
  • shared - plusieurs threads peuvent partager la propriété du même mutex.

Les mutex partagés sont généralement utilisés dans des situations où plusieurs lecteurs peuvent accéder à la même ressource simultanément sans provoquer de courses aux données, mais un seul rédacteur peut le faire.

D'une manière similaire à timed_mutex , shared_timed_mutex offre la possibilité de tenter de revendiquer la propriété d'un shared_timed_mutex avec un délai d'attente via les fonctions membres try_lock_for() , try_lock_until() , try_lock_shared_for() , try_lock_shared_until() .

La classe shared_timed_mutex satisfait toutes les exigences de SharedTimedMutex et de StandardLayoutType .

Table des matières

Fonctions membres

construit le mutex
(fonction membre publique)
détruit le mutex
(fonction membre publique)
operator=
[deleted]
non assignable par copie
(fonction membre publique)
Verrouillage exclusif
verrouille le mutex, bloque si le mutex n'est pas disponible
(fonction membre publique)
tente de verrouiller le mutex, retourne si le mutex n'est pas disponible
(fonction membre publique)
tente de verrouiller le mutex, retourne si le mutex est resté
indisponible pendant la durée de timeout spécifiée
(fonction membre publique)
tente de verrouiller le mutex, retourne si le mutex est resté
indisponible jusqu'à ce que le point temporel spécifié soit atteint
(fonction membre publique)
déverrouille le mutex
(fonction membre publique)
Verrouillage partagé
verrouille le mutex en propriété partagée, bloque si le mutex n'est pas disponible
(fonction membre publique)
tente de verrouiller le mutex en propriété partagée, retourne si le mutex n'est pas disponible
(fonction membre publique)
tente de verrouiller le mutex en propriété partagée, retourne si le mutex est resté
indisponible pendant la durée de timeout spécifiée
(fonction membre publique)
tente de verrouiller le mutex en propriété partagée, retourne si le mutex est resté
indisponible jusqu'à ce que le point temporel spécifié soit atteint
(fonction membre publique)
déverrouille le mutex (propriété partagée)
(fonction membre publique)

Notes

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_shared_timed_mutex 201402L (C++14) std::shared_timed_mutex

Exemple

Un opérateur d'affectation par copie pour une classe qui détient des ressources pouvant gérer plusieurs lecteurs, mais un seul écrivain.

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