Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Un blocco lettore-scrittore basato sulla coda di preferenza writer con spin solo locale. Il blocco concede l'accesso FIFO (First in First out) agli scrittori e affama i lettori sotto un carico continuo di scrittura.
Sintassi
class reader_writer_lock;
Membri
Classi pubbliche
| Nome | Descrizione |
|---|---|
| Classe reader_writer_lock::scoped_lock | Wrapper RAII sicuro di eccezione che può essere usato per acquisire reader_writer_lock oggetti di blocco come writer. |
| Classe reader_writer_lock::scoped_lock_read | Wrapper RAII resistente alle eccezioni che può essere utilizzato per acquisire oggetti di blocco reader_writer_lock come lettore. |
Costruttori pubblici
| Nome | Descrizione |
|---|---|
| reader_writer_lock | Costruisce un oggetto reader_writer_lock nuovo. |
| ~reader_writer_lock Distruttore | Elimina definitivamente l'oggetto reader_writer_lock . |
Metodi pubblici
| Nome | Descrizione |
|---|---|
| lock | Acquisisce come scrittore il blocco reader-writer. |
| lock_read | Acquisisce il blocco reader-writer come lettore. Se ci sono scriventi, i lettori attivi devono aspettare fino a quando non completano il loro lavoro. Il lettore registra semplicemente un interesse nel lucchetto e attende che gli scrittori lo rilascino. |
| try_lock | Tenta di acquisire il blocco lettore-scrittore come scrittore senza bloccare. |
| try_lock_read | Tenta di acquisire il blocco lettore-scrittore come lettore senza bloccare. |
| unlock | Sblocca il blocco lettore-scrittore in base a chi lo ha bloccato, lettore o scrittore. |
Osservazioni:
Per altre informazioni, vedere Strutture dei dati di sincronizzazione.
Gerarchia di ereditarietà
reader_writer_lock
Requisiti
Intestazione: concrt.h
Spazio dei nomi: Concurrency
lock
Acquisisce il blocco reader-writer come writer.
void lock();
Osservazioni:
Spesso è più sicuro usare il costrutto scoped_lock per acquisire e rilasciare un reader_writer_lock oggetto come writer in modo sicuro.
Dopo il tentativo di acquisizione del blocco da parte di un writer, qualsiasi lettore futuro si bloccherà finché il blocco non sarà stato acquisito e rilasciato correttamente dai writer. Questo lock è orientato verso gli scriventi e può affamare i lettori sotto un carico continuo di scriventi.
Gli scrittori sono incatenati in modo che uno scrittore, lasciando il blocco, rilasci il successivo in linea.
Se il blocco è già mantenuto dal contesto chiamante, verrà generata un'eccezione improper_lock .
lock_read
Acquisisce il blocco reader-writer come lettore. Se ci sono scriventi, i lettori attivi devono aspettare fino a quando non completano il loro lavoro. Il lettore registra semplicemente un interesse nel lucchetto e attende che gli scrittori lo rilascino.
void lock_read();
Osservazioni:
Spesso è più sicuro usare il costrutto scoped_lock_read per acquisire e rilasciare un oggetto reader_writer_lock come lettore in un modo sicuro rispetto alle eccezioni.
Se ci sono degli scrittori in attesa del blocco, il lettore aspetterà finché tutti gli scrittori in coda non avranno acquisito e rilasciato il blocco. Questo lock è orientato verso gli scriventi e può affamare i lettori sotto un carico continuo di scriventi.
blocco_lettore_scrittore
Costruisce un oggetto reader_writer_lock nuovo.
reader_writer_lock();
~blocco_lettori_scrittori
Elimina definitivamente l'oggetto reader_writer_lock .
~reader_writer_lock();
Osservazioni:
È previsto che il blocco non venga più mantenuto quando viene eseguito il distruttore. Consentire al blocco di lettura-scrittura di essere distrutto mentre è ancora detenuto risulta in un comportamento indefinito.
Classe reader_writer_lock::scoped_lock
Wrapper RAII sicuro di eccezione che può essere usato per acquisire reader_writer_lock oggetti di blocco come writer.
class scoped_lock;
scoped_lock::scoped_lock
Costruisce un scoped_lock oggetto e acquisisce l'oggetto reader_writer_lock passato nel _Reader_writer_lock parametro come writer. Se il blocco viene mantenuto da un altro thread, questa chiamata verrà bloccata.
explicit _CRTIMP scoped_lock(reader_writer_lock& _Reader_writer_lock);
Parametri
_Reader_writer_lock
Oggetto reader_writer_lock da acquisire come scrittore.
scoped_lock::~scoped_lock
Elimina un reader_writer_lock oggetto e rilascia il blocco fornito nel suo costruttore.
~scoped_lock();
Classe reader_writer_lock::scoped_lock_read
Wrapper RAII resistente alle eccezioni che può essere utilizzato per acquisire oggetti di blocco reader_writer_lock come lettore.
class scoped_lock_read;
scoped_lock_read::scoped_lock_read
Costruisce un scoped_lock_read oggetto e acquisisce l'oggetto reader_writer_lock passato nel _Reader_writer_lock parametro come lettore. Se il blocco è detenuto da un altro thread come scrittore o se sono presenti scrittori in sospeso, questa chiamata si bloccherà.
explicit _CRTIMP scoped_lock_read(reader_writer_lock& _Reader_writer_lock);
Parametri
_Reader_writer_lock
Oggetto reader_writer_lock da acquisire in qualità di lettore.
Distruttore reader_writer_lock::scoped_lock_read::~scoped_lock_read
Elimina un oggetto scoped_lock_read e rilascia il blocco fornito nel suo costruttore.
~scoped_lock_read();
try_lock
Tenta di acquisire il blocco lettore-scrittore come scrittore senza bloccare.
Sintassi
bool try_lock();
Valore restituito
Se il blocco è stato acquisito, il valore true; in caso contrario, il valore false.
try_lock_read
Tenta di acquisire il blocco lettore-scrittore come lettore senza bloccare.
bool try_lock_read();
Valore restituito
Se il blocco è stato acquisito, il valore true; in caso contrario, il valore false.
unlock
Sblocca il blocco lettore-scrittore in base a chi lo ha bloccato, lettore o scrittore.
void unlock();
Osservazioni:
Se sono presenti writer in attesa del blocco, il rilascio del blocco passerà sempre al writer successivo nell'ordine FIFO. Questo lock è orientato verso gli scriventi e può affamare i lettori sotto un carico continuo di scriventi.