Klasa CSemaphore
Obiekt klasy CSemaphore reprezentuje "semafora" — obiekt synchronizacji, który umożliwia ograniczoną liczbę wątków w jeden lub więcej procesów zapewnia dostęp do zliczania liczby wątków obecnie dostęp do określonego zasobu.
class CSemaphore : public CSyncObject
Członkowie
Publiczne konstruktory
Nazwa |
Opis |
---|---|
Konstrukcje CSemaphore obiektu. |
Uwagi
Semafory są przydatne w kontrolowanie dostępu do zasobu udostępnionego, który może obsługiwać tylko ograniczoną liczbę użytkowników.Bieżąca liczba CSemaphore obiektu jest liczba dodatkowych użytkowników.Gdy licznik osiągnie zero, wszystkie próbuje użyć zasobów kontrolowanych przez CSemaphore obiekt zostanie wstawiona do kolejki systemowe i czekać aż do ich albo limit czasu lub licznika wzrośnie powyżej 0.Maksymalna liczba użytkowników, którzy mają dostęp kontrolowany zasobów jednocześnie zostanie określony podczas budowy CSemaphore obiektu.
Aby użyć CSemaphore obiektów, skonstruować CSemaphore obiektu, gdy jest potrzebna.Określ nazwę semafora chcesz czekać i aplikacji początkowo powinien należeć.Semafor może następnie uzyskać dostęp podczas zwraca konstruktora.Wywołanie CSyncObject::Unlock po zakończeniu uzyskiwanie dostępu do zasobów kontrolowanych.
Alternatywna metoda za pomocą CSemaphore obiektów jest dodanie do zmiennej typu CSemaphore jako członek danych do klasy do kontroli.Podczas budowy kontrolowanych obiektu, wywołanie konstruktora CSemaphore elementu danych, określanie wstępnych dostępu liczba, liczba maksymalna dostępu, nazwę semafora (jeśli będzie używany przez granice procesu) i pożądane atrybuty zabezpieczeń.
Dostępu do zasobów kontrolowanych przez CSemaphore obiektów w ten sposób utworzyć zmienną typu albo CSingleLock lub CMultiLock w funkcji Członkowskich dostępu użytkownika zasobu.Następnie wywołać obiekt Zablokuj Lock Członkowskich funkcji (na przykład CSingleLock::Lock).W tym momencie wątek będzie albo uzyskać dostęp do zasobu, oczekiwania zasobu zwolnione i uzyskać dostęp lub oczekiwania zasobu na zwolniony i limit czasu, nieudana próba uzyskania dostępu do zasobu.W każdym przypadku zasób uzyskiwano w sposób bezpieczny wątku.Aby zwolnić zasób, należy zablokować obiektu Unlock Członkowskich funkcji (na przykład CSingleLock::Unlock), lub zablokować obiektu spadnie poza zakresem.
Alternatywnie, można utworzyć CSemaphore object autonomiczne i wyraźnie dostęp przed próbą dostępu do zasobów kontrolowanych.Ta metoda podczas jaśniejszym, aby osoba czytająca Twój kod źródłowy jest bardziej podatne na błędy.
Aby uzyskać więcej informacji na temat korzystania CSemaphore obiektów, zobacz artykuł Multithreading: jak używać klasy synchronizacji.
Hierarchii dziedziczenia
CSemaphore
Wymagania
Nagłówek: afxmt.h