Partager via


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.

Voir aussi

accès concurrentiel Namespace
critical_section, classe