CSemaphore

Obiekt klasy CSemaphore reprezentuje "semafora" — obiekt synchronizacji, który umożliwia ograniczoną liczbę wątków w jeden lub więcej procesów dostęp do zasobu. Obiekt CSemaphore utrzymuje liczba liczba wątków obecnie dostęp do określonego zasobu.

Semafory służą do kontrolowania dostępu do udostępnionego zasobu, który może obsługiwać tylko ograniczona liczba użytkowników. Bieżąca liczba obiekt CSemaphore jest liczba dodatkowych użytkowników. Gdy licznik osiągnął zero, wszystkie próby wykorzystania zasobów kontrolowanych przez obiekt CSemaphore zostanie wstawiona do kolejki systemu i poczekaj, aż do ich upływać limit czasu lub licznika wzrośnie powyżej 0. Maksymalna liczba użytkowników, którzy jednocześnie dostęp kontrolowany zasobu jest określany w trakcie budowy obiektu CSemaphore.

Aby użyć obiektu CSemaphore , konstruowania obiektu CSemaphore , gdy jest to konieczne. Określ nazwę semafora chcesz czekać, oraz że aplikacja początkowo powinien należeć ona. Następnie można uzyskać dostęp semafora podczas zwraca konstruktora. Wywołanie CSyncObject::Unlock , gdy skończysz uzyskiwania dostępu do zasobów kontrolowanych.

Alternatywną metodą za pomocą obiektów CSemaphore jest dodanie zmiennej typu CSemaphore jako członek danych do klasę, którą chcesz kontrolować. Podczas budowy kontrolowanych obiektu wywołanie konstruktora członek danych CSemaphore , określając liczba początkowa dostępu, dostęp maksymalna liczba, nazwa semafora (jeśli będzie używany przez granice procesu) i żądanego atrybutów zabezpieczeń.

Dostęp contolled zasobów przez obiekty CSemaphore w ten sposób, najpierw utworzyć zmienną albo typu CSingleLock lub CMultiLock 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 CSemaphore 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.

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

# include lt;afxmt.h>

Czło&nkowie klasy |nbsp; Klasa podstawowa | Wykres hierarchii

Próbki  MFC próbki MUTEKSY

Index