Udostępnij za pośrednictwem


Wielowątkowość: kiedy używać klas synchronizacji

Wielowątkowe klas przedstawionych MFC dzielą się na dwie kategorie: obiektów synchronizacji (CSyncObject, CSemaphore, CMutex, CCriticalSection, i klasy CEvent) i synchronizacji dostępu do obiektów (CMultiLock i CSingleLock).

Synchronizacja klas są używane podczas dostępu do zasobu muszą być kontrolowane w celu zapewnienia integralności zasobu.Synchronizacja dostępu do klasy są używane do uzyskania dostępu do tych zasobów kontrolowanych.W tym temacie opisano, kiedy należy używać poszczególnych klas.

Aby ustalić, która z klas synchronizacji należy użyć, poproś następujący szereg pytań:

  1. Czy aplikacja ma czekać na coś się stanie, aby umożliwić dostęp do zasobów (na przykład danych musi być pobrana z portu komunikacyjnego przed mogą być zapisywane w pliku)?

    If yes, use CEvent.

  2. Może więcej niż jednym wątku w taki sam dostęp aplikacji tego zasobu w tym samym czasie (na przykład, aplikacja pozwala maksymalnie pięć okna z widokiem na tym samym dokumencie)?

    If yes, use CSemaphore.

  3. Można użyć więcej niż jeden wniosek ten zasób (na przykład zasób jest w bibliotece DLL)?

    If yes, use CMutex.

    If no, use CCriticalSection.

CSyncObject nigdy nie jest używany bezpośrednio.Jest klasą bazową dla innych klas synchronizacji cztery.

Przykład 1: Korzystanie z trzech klas synchronizacji

Na przykład podjąć aplikację, która utrzymuje listę połączonych kont.Aplikacja ta pozwala maksymalnie trzy konta należy zbadać w osobnych oknach, ale mogą być aktualizowane tylko jeden w każdej chwili w szczególności.Po zaktualizowaniu konto zaktualizowane dane są przesyłane przez sieć do archiwum danych.

Ten przykład aplikacja wykorzystuje wszystkie trzy typy klas synchronizacji.Ponieważ pozwala maksymalnie trzy konta zostały poddane kontroli w tym samym czasie, używa CSemaphore Aby ograniczyć dostęp do trzech obiektów widoku.Podczas próby wyświetlenia czwartego konta wystąpienia aplikacji, albo czeka, aż jeden z pierwszych trzech oknach zostaje zamknięty lub nie jest on.Po zaktualizowaniu konto używane przez aplikację CCriticalSection do zapewnienia, że w danej chwili jest aktualizowany tylko jedno konto.Po aktualizacji zakończy się pomyślnie, sygnalizuje CEvent, który uwalnia wątku oczekiwania na zdarzenia być informowany.Ten wątek wysyła nowe dane do archiwum danych.

Przykład 2: Korzystanie z klas dostępu do synchronizacji

Wybranie opcji, które klasy dostępu do synchronizacji jest jeszcze prostsze.Jeśli aplikacja dotyczy tylko jednego zasobu kontrolowany dostęp do, użyj CSingleLock.Jeśli będzie potrzebował dostępu do jednego z wielu zasobów kontrolowanych, użyj CMultiLock.W przykładzie 1 CSingleLock czy zostały użyte, ponieważ w każdym przypadku potrzebna jest tylko jeden zasób w jakimkolwiek terminie.

Aby uzyskać informacji na temat używania klas synchronizacji, zobacz wielowątkowość: jak używać klasy synchronizacji.Aby uzyskać informacje o synchronizacji, zobacz synchronizacji w Windows SDK.Informacje wielowątkowego MFC, zobacz wielowątkowość z C++ i MFC.

Zobacz też

Koncepcje

Wielowątkowość z C++ i MFC