
Un oggetto della classe CSemaphore rappresenta un "semaforo" — un oggetto di sincronizzazione che permette un numero limitato di thread in uno o più processi di accedere a una risorsa. Un oggetto CSemaphore gestisce un conteggio del numero di thread che attualmente l'accesso a una risorsa specificata.
I semafori sono utili per controllare l'accesso a una risorsa condivisa che può supportare solo un numero limitato di utenti. Il conteggio corrente dell'oggetto CSemaphore è il numero di ulteriori utenti autorizzati. Quando il conteggio raggiunge lo zero, tutti i tentativi di utilizzare la risorsa controllata dall'oggetto CSemaphore saranno inseriti in una coda di sistema e attendere fino a quando sia fuori tempo o il conteggio sorge sopra 0. Il numero massimo di utenti che possono accedere alla risorsa controllata in una sola volta viene specificato durante la costruzione dell'oggetto CSemaphore.
Per utilizzare un oggetto CSemaphore , costruire l'oggetto CSemaphore quando è necessario. Specificare il nome del semaforo si desidera attendere, e che l'applicazione deve inizialmente possederlo. Si può quindi accedere il semaforo, quando termina il costruttore. Chiamare CSyncObject::Unlock quando si è fatto l'accesso alla risorsa controllata.
Un metodo alternativo per l'utilizzo di oggetti CSemaphore è quello di aggiungere una variabile di tipo CSemaphore come membro dati alla classe che si desidera regolare. Durante la costruzione dell'oggetto controllato, chiamare il costruttore del membro dati CSemaphore specificando il conte di accesso iniziale, il conteggio massimo accesso, il nome del semaforo (se verrà utilizzato oltre i limiti del processo) e desiderato gli attributi di protezione.
Per accedere a risorse contolled da CSemaphore oggetti in questo modo, prima di creare una variabile di tipo CSingleLock tipo CMultiLocko nella funzione di membro accesso della risorsa. Quindi chiamare la funzione di membro dell'oggetto lock Lock (ad esempio, CSingleLock::Lock). A questo punto, il thread sarà o accedere alla risorsa, attendere per essere rilasciato e ottenere l'accesso o aspettare la risorsa per essere rilasciato e time out, non riuscendo a ottenere l'accesso alla risorsa della risorsa. In ogni caso, la vostra risorsa ha avuto accesso in modo thread-safe. Per rilasciare la risorsa, utilizzare la funzione di membro dell'oggetto blocco Unlock (ad esempio, CSingleLock::Unlock) o consentire all'oggetto di serratura a cadere fuori dell'ambito.
In alternativa, è possibile creare un oggetto CSemaphore stand-alone e accedervi in modo esplicito prima di tentare di accedere alla risorsa controllata. Questo metodo, mentre più chiara a qualcuno di leggere il codice sorgente, è più incline ad Errori.
Per ulteriori informazioni su come utilizzare gli oggetti CSemaphore , vedere l'articolo Multithreading: come utilizzare le classi di sincronizzazione nel manuale del programmatore di Visual C++.
# include lt;afxmt.h>
Membri della classe | Classe base | Gerarchia Chart
Campio&nenbsp; Esempio MFC MUTEX