Udostępnij za pośrednictwem


Synchronizacja struktury danych

Runtime współbieżności zawiera kilka struktur danych, które umożliwiają synchronizowania dostępu do udostępnionych danych z wielu wątków.Struktury te dane są przydatne, gdy udostępnionych danych, które można modyfikować rzadko.Obiekt synchronizacji, na przykład sekcji krytycznej, powoduje, że inne wątki poczekać, aż udostępniony zasób jest dostępny.W związku z tym Jeśli używasz takiego obiektu do synchronizowania dostępu do danych, która jest często używany, można stracić skalowalność w aplikacji.Biblioteka desenie równoległe (PPL) Zawiera concurrency::combinable klasy, która umożliwia udostępnianie zasobów między kilka wątków lub zadań bez konieczności synchronizacji.Aby uzyskać więcej informacji o combinable klasy, zobacz Równoległe kontenerów i obiektów.

Sekcje

W tym temacie opisano następujące typy bloku asynchroniczny komunikat szczegółowo:

  • CRITICAL_SECTION

  • reader_writer_lock

  • scoped_lock i scoped_lock_read

  • Zdarzenie

CRITICAL_SECTION

Concurrency::critical_section klasy reprezentuje obiekt mutex współpracy zwracające się do innych zadań, zamiast je preempting.Sekcje krytyczne są przydatne, gdy wiele wątków wymagają wyłącznego odczytu i zapisu do udostępnionych danych.

critical_section Klasy jest nie wywołał.Concurrency::critical_section::lock metoda wygeneruje wyjątek typu concurrency::improper_lock , jeśli jest wywoływana przez wątek, który już jest właścicielem blokady.

Dd492638.collapse_all(pl-pl,VS.110).gifMetody i funkcje

W poniższej tabeli przedstawiono ważne metody, które są definiowane przez critical_section klasy.

Metoda

Opis

Zablokuj

Nabywa sekcji krytycznej.Wywołujący bloki kontekstu aż kupuje blokady.

try_lock

Próbuje uzyskać sekcji krytycznej, ale nie są blokowane.

odblokowywanie

Zwalnia sekcji krytycznej.

Top

reader_writer_lock

Concurrency::reader_writer_lock klasy zawiera operacje odczytu i zapisu wielowątkowość do udostępnionych danych.Używać blokad Czytnik/zapisywarka wiele wątków wymagają równoczesnych dostępu odczytu do zasobu udostępnionego, ale rzadko zapisu do tego zasobu udostępnionego.Ta klasa daje dostęp do zapisu tylko jeden wątek do obiektu w dowolnym momencie.

reader_writer_lock Klasy można wykonywać lepiej niż critical_section klasy, ponieważ critical_section obiektu nabywa wyłącznego dostępu do zasobu udostępnionego, który zapobiega współbieżnego dostępu do odczytu.

Podobnie jak critical_section klasy reader_writer_lock klasy reprezentuje obiekt mutex współpracy zwracające się do innych zadań, zamiast je preempting.

Gdy wątek, który musi zapisać do zasobu udostępnionego uzyskuje blokadę Czytnik/zapisywarka, inne wątki, które również musi uzyskać dostęp do zasobu są zablokowane, dopóki moduł zapisujący zwalnia blokadę.reader_writer_lock Klasy jest przykładem preferencji zapisu lock blokada odblokowuje pisarzy oczekiwania, zanim go odblokowuje czytelników oczekiwania.

Podobnie jak critical_section klasy reader_writer_lock klasy jest nie wywołał.Concurrency::reader_writer_lock::lock i concurrency::reader_writer_lock::lock_read metody Zgłoś wyjątek typu improper_lock , jeśli są one wywoływane przez wątek, który już jest właścicielem blokady.

[!UWAGA]

Ponieważ reader_writer_lock klasy nie wywołał, nie można uaktualnić tylko do odczytu lock blokady Czytnik/zapisywarka lub obniżyć blokady Czytnik/zapisywarka blokady tylko do odczytu.Jedną z tych operacji wykonywania powoduje zachowanie nieokreślona.

Dd492638.collapse_all(pl-pl,VS.110).gifMetody i funkcje

W poniższej tabeli przedstawiono ważne metody, które są definiowane przez reader_writer_lock klasy.

Metoda

Opis

Zablokuj

Uzyskuje dostęp do odczytu i zapisu do blokady.

try_lock

Próbuje uzyskać dostęp do odczytu i zapisu do blokowania, ale nie są blokowane.

lock_read

Uzyskuje dostęp tylko do odczytu do blokady.

try_lock_read

Próbuje uzyskać dostęp tylko do odczytu do blokowania, ale nie są blokowane.

odblokowywanie

Zwalnia blokadę.

Top

scoped_lock i scoped_lock_read

critical_section i reader_writer_lock klasy zapewniają klas zagnieżdżonych pomocnika, które uproszczenie sposobu pracy z obiektów mutex.Te klasy pomocy są znane jako o zakresie blokad.

critical_section Zawiera klasy concurrency::critical_section::scoped_lock klasy.Konstruktor uzyskuje dostęp do dostarczonego critical_section obiektu; destruktor zwalnia dostęp do tego obiektu.reader_writer_lock Zawiera klasy concurrency::reader_writer_lock::scoped_lock klasy, która jest podobna do critical_section::scoped_lock, chyba że zarządza zapisu do podanej reader_writer_lock obiektu.reader_writer_lock Zawiera również klasy concurrency::reader_writer_lock::scoped_lock_read klasy.Klasa ta zarządza dostęp do odczytu do dostarczonego reader_writer_lock obiektu.

Blokady zakresu zalety podczas pracy z critical_section i reader_writer_lock obiekty ręcznie.Zazwyczaj przydzielić zakresu blokowania na stosie.Zablokuj zakresu zwalniany dostęp do jej obiektu mutex automatycznie zostanie zniszczone; Dlatego użytkownik nie ręcznie odblokować obiektu źródłowego.Jest to przydatne, gdy funkcja zawiera wiele return sprawozdania.Blokady zakresu pomogą także napisać kod wyjątku palety.Gdy throw instrukcja powoduje, że stos na odpoczynek, destruktor dla dowolnego aktywnego zakresu lock jest nazywany i dlatego zawsze prawidłowo będzie zwalniany obiekt mutex.

[!UWAGA]

Kiedy używać critical_section::scoped_lock, reader_writer_lock::scoped_lock, i reader_writer_lock::scoped_lock_read klasy, ręcznie nie zwalnia dostęp do podstawowych obiektu mutex.To umieść aparat plików wykonywalnych w nieprawidłowym stanie.

Zdarzenie

Concurrency::event klasy reprezentuje obiekt synchronizacji, w których Państwo może być sygnalizowane lub nie zasygnalizowane.W przeciwieństwie do synchronizacji obiektów, takich jak sekcje krytyczne, których celem jest ochrona dostępu do udostępnionych danych, zdarzenia synchronizacji przepływu wykonanie.

event Klasy jest przydatne, gdy jedno zadanie zakończy pracę innego zadania.Na przykład jednym z zadań może być sygnału innego zadania czy ma on odczytu danych z połączeniem sieciowym lub z pliku.

Dd492638.collapse_all(pl-pl,VS.110).gifMetody i funkcje

W poniższej tabeli przedstawiono kilka ważnych metod, które są definiowane przez event klasy.

Metoda

Opis

Czekaj

Oczekuje na zdarzenie zasygnalizowanie.

zestaw

Ustawia stan zasygnalizowany zdarzenia.

Resetuj

Ustawia Państwo zasygnalizowane zdarzenie.

wait_for_multiple

Czeka na wiele zdarzeń zasygnalizowanie.

Dd492638.collapse_all(pl-pl,VS.110).gifPrzykład

Przykład ilustruje sposób użycia event klasy, zobacz Porównanie synchronizacji struktur danych do systemu Windows API.

Top

Sekcje pokrewne