reader_writer_lock, classe
Verrou de lecteur-writer basé sur une file d'attente à préférence de writer avec rotation uniquement locale. Le verrou accorde un accès Premier entré, premier sorti aux writers et prive les lecteurs sous une charge continue de writers.
Syntaxe
class reader_writer_lock;
Membres
Classes publiques
Nom | Description |
---|---|
classe reader_writer_lock ::scoped_lock | Un wrapper RAII sécurisé d’exception qui peut être utilisé pour acquérir des reader_writer_lock objets de verrouillage en tant qu’enregistreur. |
classe reader_writer_lock :scoped_lock_read | Un wrapper RAII sécurisé d’exception qui peut être utilisé pour acquérir des reader_writer_lock objets de verrouillage en tant que lecteur. |
Constructeurs publics
Nom | Description |
---|---|
reader_writer_lock | Construit un nouvel objet reader_writer_lock . |
~reader_writer_lock Destructeur | Détruit l’objet reader_writer_lock . |
Méthodes publiques
Nom | Description |
---|---|
lock | Acquiert le verrou lecteur-writer en tant qu’enregistreur. |
lock_read | Acquiert le verrou lecteur-writer en tant que lecteur. S’il existe des écrivains, les lecteurs actifs doivent attendre jusqu’à ce qu’ils soient terminés. Le lecteur inscrit simplement un intérêt dans le verrou et attend que les écrivains le libèrent. |
try_lock | Tente d’acquérir le verrou lecteur-writer en tant qu’enregistreur sans bloquer. |
try_lock_read | Tente d’acquérir le verrou lecteur-writer en tant que lecteur sans bloquer. |
unlock | Déverrouille le verrou lecteur-writer en fonction de qui l’a verrouillé, lecteur ou writer. |
Notes
Pour plus d’informations, consultez Structures de données de synchronisation.
Hiérarchie d'héritage
reader_writer_lock
Spécifications
En-tête : concrt.h
Espace de noms : concurrency
lock
Acquiert le verrou lecteur-writer en tant qu’enregistreur.
void lock();
Notes
Il est souvent plus sûr d’utiliser la construction scoped_lock pour acquérir et libérer un reader_writer_lock
objet en tant qu’enregistreur de manière sécurisée.
Une fois qu’un enregistreur tente d’acquérir le verrou, tous les futurs lecteurs bloquent jusqu’à ce que les rédacteurs aient acquis et libéré le verrou. Ce verrou est biaisé vers les écrivains et peut priver les lecteurs sous une charge continue d’écrivains.
Les enregistreurs sont chaînés afin qu’un enregistreur quitte le verrou libère l’enregistreur suivant en ligne.
Si le verrou est déjà conservé par le contexte appelant, une exception improper_lock est levée.
lock_read
Acquiert le verrou lecteur-writer en tant que lecteur. S’il existe des écrivains, les lecteurs actifs doivent attendre jusqu’à ce qu’ils soient terminés. Le lecteur inscrit simplement un intérêt dans le verrou et attend que les écrivains le libèrent.
void lock_read();
Notes
Il est souvent plus sûr d’utiliser la construction scoped_lock_read pour acquérir et libérer un reader_writer_lock
objet en tant que lecteur de manière sécurisée.
S’il y a des enregistreurs en attente sur le verrou, le lecteur attend que tous les écrivains en ligne aient acquis et libéré le verrou. Ce verrou est biaisé vers les écrivains et peut priver les lecteurs sous une charge continue d’écrivains.
reader_writer_lock
Construit un nouvel objet reader_writer_lock
.
reader_writer_lock();
~reader_writer_lock
Détruit l’objet reader_writer_lock
.
~reader_writer_lock();
Notes
On s’attend à ce que le verrou ne soit plus conservé lorsque le destructeur s’exécute. L’autorisation du verrou de l’enregistreur de lecture à détruire avec le verrou continue d’entraîner un comportement non défini.
classe reader_writer_lock ::scoped_lock
Un wrapper RAII sécurisé d’exception qui peut être utilisé pour acquérir des reader_writer_lock
objets de verrouillage en tant qu’enregistreur.
class scoped_lock;
scoped_lock ::scoped_lock
Construit un scoped_lock
objet et acquiert l’objet reader_writer_lock
passé dans le _Reader_writer_lock
paramètre en tant qu’enregistreur. Si le verrou est conservé par un autre thread, cet appel se bloque.
explicit _CRTIMP scoped_lock(reader_writer_lock& _Reader_writer_lock);
Paramètres
_Reader_writer_lock
Objet reader_writer_lock
à acquérir en tant qu’enregistreur.
scoped_lock ::~scoped_lock
Détruit un reader_writer_lock
objet et libère le verrou fourni dans son constructeur.
~scoped_lock();
classe reader_writer_lock :scoped_lock_read
Un wrapper RAII sécurisé d’exception qui peut être utilisé pour acquérir des reader_writer_lock
objets de verrouillage en tant que lecteur.
class scoped_lock_read;
scoped_lock_read ::scoped_lock_read
Construit un scoped_lock_read
objet et acquiert l’objet reader_writer_lock
passé dans le _Reader_writer_lock
paramètre en tant que lecteur. Si le verrou est conservé par un autre thread en tant qu’enregistreur ou s’il existe des enregistreurs en attente, cet appel bloque.
explicit _CRTIMP scoped_lock_read(reader_writer_lock& _Reader_writer_lock);
Paramètres
_Reader_writer_lock
Objet reader_writer_lock
à acquérir en tant que lecteur.
reader_writer_lock ::scoped_lock_read ::~scoped_lock_read Destructeur
Détruit un scoped_lock_read
objet et libère le verrou fourni dans son constructeur.
~scoped_lock_read();
try_lock
Tente d’acquérir le verrou lecteur-writer en tant qu’enregistreur sans bloquer.
Syntaxe
bool try_lock();
Valeur de retour
Si le verrou a été acquis, la valeur true
; sinon, la valeur false
.
try_lock_read
Tente d’acquérir le verrou lecteur-writer en tant que lecteur sans bloquer.
bool try_lock_read();
Valeur de retour
Si le verrou a été acquis, la valeur true
; sinon, la valeur false
.
déverrouiller
Déverrouille le verrou lecteur-writer en fonction de qui l’a verrouillé, lecteur ou writer.
void unlock();
Notes
S’il y a des enregistreurs en attente sur le verrou, la sortie du verrou passe toujours à l’enregistreur suivant dans l’ordre FIFO. Ce verrou est biaisé vers les écrivains et peut priver les lecteurs sous une charge continue d’écrivains.