Struktury danych synchronizacji
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 równoległych wzorców (PLL) 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 kontenery oraz obiekty.
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.
Metody i funkcje
W poniższej tabeli przedstawiono ważne metody, które są definiowane przez critical_section klasy.
Metoda |
Opis |
---|---|
Nabywa sekcji krytycznej.Wywołujący bloki kontekstu aż kupuje blokady. |
|
Próbuje uzyskać sekcji krytycznej, ale nie są blokowane. |
|
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.
Metody i funkcje
W poniższej tabeli przedstawiono ważne metody, które są definiowane przez reader_writer_lock klasy.
Metoda |
Opis |
---|---|
Uzyskuje dostęp do odczytu i zapisu do blokady. |
|
Próbuje uzyskać dostęp do odczytu i zapisu do blokowania, ale nie są blokowane. |
|
Uzyskuje dostęp tylko do odczytu do blokady. |
|
Próbuje uzyskać dostęp tylko do odczytu do blokowania, ale nie są blokowane. |
|
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.
Metody i funkcje
W poniższej tabeli przedstawiono kilka ważnych metod, które są definiowane przez event klasy.
Metoda |
Opis |
---|---|
Oczekuje na zdarzenie zasygnalizowanie. |
|
Ustawia stan zasygnalizowany zdarzenia. |
|
Ustawia Państwo zasygnalizowane zdarzenie. |
|
Czeka na wiele zdarzeń zasygnalizowanie. |
Przykład
Przykład ilustruje sposób użycia event klasy, zobacz Porównywanie struktur danych synchronizacji z Windows API.
Top
Sekcje pokrewne
Porównywanie struktur danych synchronizacji z Windows API
Porównuje zachowanie struktury danych synchronizacji przez interfejs API systemu Windows.Współbieżność środowiska wykonawczego
W tym artykule opisano Runtime współbieżności, który upraszcza programowania równoległego i zawiera łącza do tematów pokrewnych.