CCriticalSection

Obiekt klasy CCriticalSection reprezentuje "sekcji krytycznej" — obiekt synchronizacji, który umożliwia jeden wątek na czas dostępu do zasobów lub sekcji kodu. Sekcje krytyczne są przydatne, gdy tylko jeden wątek na raz można zezwolić na modyfikowanie danych lub innych kontrolowanych zasobów. Na przykład dodawania węzłów do połączonej listy jest procesem, która powinna być dozwolona tylko przez jeden wątek na raz. Za pomocą obiektu CCriticalSection aby kontrolować połączonej listy, tylko jeden wątek jednocześnie mogą uzyskać dostęp do listy.

Sekcje krytyczne są używane zamiast muteksy, gdy prędkość jest krytyczna i zasób nie będzie używany przez granice procesu. Aby uzyskać więcej informacji na temat używania muteksów w MFC zobacz CMutex.

Aby użyć obiektu CCriticalSection , konstruowania obiektu CCriticalSection , gdy jest to konieczne. Następnie można uzyskać dostęp sekcję krytyczną gdy zwraca konstruktora. Wywołać metodę Unlock , gdy skończysz dostęp do sekcji krytycznej.

Aby uzyskać dostęp do zasobów kontrolowanych przez obiekt CCriticalSection w ten sposób, najpierw utworzyć zmienną typu CSingleLock w funkcji składowej dostępu użytkownika zasobu. Następnie wywołania obiektu kłódki Zablokuj Państwa funkcji (na przykład CSingleLock::Lock). W tym momencie Twój wątek będzie albo uzyskać dostęp do zasobu, czekać na zasób zwalniane i uzyskać dostęp lub opcje czekania na zasób powinien zostać wydany i limit czasu, nieudana próba uzyskania dostępu do zasobu. W każdym przypadku w sposób bezpieczny wątku obejrzano zasób. Aby zwolnić zasób, użyć obiektu blokady Unlock Państwa funkcji (na przykład CSingleLock::Unlock), lub pozwolić obiektu blokady mieszczą się poza zakresem.

Alternatywnie można utworzyć autonomiczny obiekt CCriticalSection i dostęp wyraźnie przed podjęciem próby dostępu do zasobów kontrolowanych. Ta metoda, przy jednoczesnym jaśniejszym aby osoba czytająca Twój kod źródłowy, jest bardziej podatna na błąd, należy pamiętać, aby blokowanie i odblokowywanie sekcji krytycznej, przed i po dostępu.

Aby uzyskać więcej informacji na temat używania CCriticalSection obiektów, zobacz artykuł Multithreading: używania klas synchronizacji w Visual C++ Programmer's Guide.

# include lt;afxmt.h>

Członkowie klasy |nbsp; Klasa podstawowa | Wykres hierarchii

Próbki  Próbki MFC MTGDI

Zobacz też CMutex

Index