Udostępnij za pośrednictwem


reader_writer_lock — Klasa

Blokada zapisywania i zapisywania opartego na kolejce czytnika i zapisywania z lokalnym tylko wirowaniem. Blokada przyznaje najpierw w - pierwszy na out (FIFO) dostęp do pisarzy i głoduje czytelników pod ciągłym obciążeniem pisarzy.

Składnia

class reader_writer_lock;

Elementy członkowskie

Klasy publiczne

Nazwa/nazwisko opis
klasa reader_writer_lock::scoped_lock Bezpieczna otoka RAII, która może służyć do uzyskiwania reader_writer_lock obiektów blokady jako składnika zapisywania.
klasa reader_writer_lock::scoped_lock_read Bezpieczna otoka RAII, która może służyć do uzyskiwania reader_writer_lock obiektów blokady jako czytnika.

Konstruktory publiczne

Nazwa/nazwisko opis
reader_writer_lock Tworzy nowy reader_writer_lock obiekt.
~reader_writer_lock Destruktor reader_writer_lock Niszczy obiekt.

Metody publiczne

Nazwa/nazwisko opis
lock Uzyskuje blokadę czytnika i zapisywania jako składnik zapisywania.
lock_read Uzyskuje blokadę czytnika i zapisywania jako czytelnik. Jeśli są pisarze, aktywni czytelnicy muszą czekać, aż zostaną wykonane. Czytelnik po prostu rejestruje zainteresowanie blokadą i czeka na pisarzy, aby go zwolnić.
try_lock Próbuje uzyskać blokadę reader-writer jako składnik zapisywania bez blokowania.
try_lock_read Próbuje uzyskać blokadę czytnika i zapisywania jako czytelnik bez blokowania.
Odblokować Odblokowuje blokadę czytnika i zapisywania na podstawie tego, kto go zablokował, czytelnika lub pisarza.

Uwagi

Aby uzyskać więcej informacji, zobacz Synchronizacja struktur danych.

Hierarchia dziedziczenia

reader_writer_lock

Wymagania

Nagłówek: concrt.h

Przestrzeń nazw: współbieżność

lock

Uzyskuje blokadę czytnika i zapisywania jako składnik zapisywania.

void lock();

Uwagi

Często bezpieczniejsze jest wykorzystanie konstrukcji scoped_lock w celu uzyskania i wydania reader_writer_lock obiektu jako składnika zapisywania w bezpieczny sposób.

Po tym, jak pisarz próbuje uzyskać blokadę, każdy przyszły czytelnik zablokuje do czasu pomyślnego uzyskania i uwolnienia blokady przez pisarzy. Ta blokada jest stronnicza wobec pisarzy i może głodować czytelników pod ciągłym obciążeniem pisarzy.

Autorzy są łańcuchowi, tak aby składnik zapisywania zamykający blokadę zwalnia następny składnik zapisywania w kolejce.

Jeśli blokada jest już przechowywana przez kontekst wywołujący, zostanie zgłoszony wyjątek improper_lock .

lock_read

Uzyskuje blokadę czytnika i zapisywania jako czytelnik. Jeśli są pisarze, aktywni czytelnicy muszą czekać, aż zostaną wykonane. Czytelnik po prostu rejestruje zainteresowanie blokadą i czeka na pisarzy, aby go zwolnić.

void lock_read();

Uwagi

Często bezpieczniejsze jest wykorzystanie konstrukcji scoped_lock_read w celu uzyskania i wydania reader_writer_lock obiektu jako czytelnika w bezpieczny sposób.

Jeśli są pisarze czekający na blokadę, czytelnik będzie czekać, aż wszyscy pisarze w kolejce nabyli i zwolnili blokadę. Ta blokada jest stronnicza wobec pisarzy i może głodować czytelników pod ciągłym obciążeniem pisarzy.

Klasa reader_writer_lock

Tworzy nowy reader_writer_lock obiekt.

reader_writer_lock();

~reader_writer_lock

reader_writer_lock Niszczy obiekt.

~reader_writer_lock();

Uwagi

Oczekuje się, że blokada nie jest już przechowywana podczas uruchamiania destruktora. Umożliwienie blokady zapisywania czytnika do destrukcji z blokadą nadal przechowywane wyniki w niezdefiniowanym zachowaniu.

klasa reader_writer_lock::scoped_lock

Bezpieczna otoka RAII, która może służyć do uzyskiwania reader_writer_lock obiektów blokady jako składnika zapisywania.

class scoped_lock;

scoped_lock::scoped_lock

scoped_lock Tworzy obiekt i uzyskuje reader_writer_lock obiekt przekazany w parametrze _Reader_writer_lock jako składnik zapisywania. Jeśli blokada jest przechowywana przez inny wątek, to wywołanie zostanie zablokowane.

explicit _CRTIMP scoped_lock(reader_writer_lock& _Reader_writer_lock);

Parametry

_Reader_writer_lock
reader_writer_lock Obiekt, który ma zostać uzyskany jako składnik zapisywania.

scoped_lock::~scoped_lock

Niszczy obiekt i zwalnia blokadę reader_writer_lock dostarczoną w konstruktorze.

~scoped_lock();

klasa reader_writer_lock::scoped_lock_read

Bezpieczna otoka RAII, która może służyć do uzyskiwania reader_writer_lock obiektów blokady jako czytnika.

class scoped_lock_read;

scoped_lock_read::scoped_lock_read

scoped_lock_read Tworzy obiekt i uzyskuje reader_writer_lock obiekt przekazany w parametrze _Reader_writer_lock jako czytelnik. Jeśli blokada jest przechowywana przez inny wątek jako składnik zapisywania lub istnieją oczekujące zapisy, to wywołanie zostanie zablokowane.

explicit _CRTIMP scoped_lock_read(reader_writer_lock& _Reader_writer_lock);

Parametry

_Reader_writer_lock
Obiekt reader_writer_lock , który ma zostać uzyskany jako czytelnik.

reader_writer_lock::scoped_lock_read::~scoped_lock_read Destruktor

Niszczy obiekt i zwalnia blokadę scoped_lock_read dostarczoną w konstruktorze.

~scoped_lock_read();

try_lock

Próbuje uzyskać blokadę reader-writer jako składnik zapisywania bez blokowania.

Składnia

bool try_lock();

Wartość zwracana

Jeśli blokada została uzyskana, wartość true; w przeciwnym razie wartość false.

try_lock_read

Próbuje uzyskać blokadę czytnika i zapisywania jako czytelnik bez blokowania.

bool try_lock_read();

Wartość zwracana

Jeśli blokada została uzyskana, wartość true; w przeciwnym razie wartość false.

Odblokować

Odblokowuje blokadę czytnika i zapisywania na podstawie tego, kto go zablokował, czytelnika lub pisarza.

void unlock();

Uwagi

Jeśli są pisarze czekający na blokadę, wydanie blokady zawsze przejdzie do następnego składnika zapisywania w kolejności FIFO. Ta blokada jest stronnicza wobec pisarzy i może głodować czytelników pod ciągłym obciążeniem pisarzy.

Zobacz też

Przestrzeń nazw współbieżności
critical_section, klasa