
Un objet de classe CSemaphore représente un « sémaphore » — un objet de synchronisation qui permet à un nombre limité de threads dans un ou plusieurs processus pour accéder à une ressource. Un objet CSemaphore conserve un décompte du nombre de threads actuellement accès à une ressource spécifiée.
Les sémaphores sont utiles pour contrôler l'accès à une ressource partagée qui peut uniquement prendre en charge un nombre limité d'utilisateurs. Le nombre actuel de l'objet CSemaphore est le nombre d'utilisateurs supplémentaires autorisés. Lorsque le compteur atteint zéro, toutes les tentatives d'utiliser les ressources contrôlées par l'objet CSemaphore seront insérées dans une file d'attente système et attendent qu'ils soit hors du temps ou de comte s'élève au-dessus de 0. Le nombre maximal d'utilisateurs pouvant accéder à la ressource contrôlée à un moment donné est spécifié lors de la construction de l'objet CSemaphore.
Pour utiliser un objet CSemaphore , construire l'objet CSemaphore lorsque c'est nécessaire. Spécifiez le nom du sémaphore vous souhaitez attendre, et que votre application doit posséder initialement il. Vous pouvez alors accéder au sémaphore lorsque le constructeur retourne. Appelez CSyncObject::Unlock lorsque vous avez terminé accès à la ressource contrôlée.
Une autre méthode pour l'utilisation des objets CSemaphore est d'ajouter une variable de type CSemaphore comme un membre de données de la classe que vous souhaitez contrôle. Lors de la construction de l'objet contrôlé, appelez le constructeur du membre de données CSemaphore spécifiant le nombre d'accès initial, comte d'accès maximum, nom du sémaphore (si elle sera utilisée à travers les frontières de processus) et souhaité des attributs de sécurité.
Pour accéder aux ressources contrôlées par CSemaphore objets de cette manière, tout d'abord créer une variable de type CSingleLock ou type CMultiLock en fonction de la ressource sur votre accès membre. Appelez ensuite la fonction de membre de l'objet lock Lock (par exemple, CSingleLock::Lock). À ce stade, votre thread sera soit accéder à la ressource, attendez que la ressource être libéré et accéder ou attendre pour la ressource d'être libéré et hors du temps, ne pas accéder à la ressource. En tout cas, votre ressource a été consultée de façon thread-safe. Pour libérer la ressource, utilisez la fonction de membre de l'objet lock Unlock (par exemple, CSingleLock::Unlock), ou permettre l'objet lock à tomber hors de la portée.
Alternativement, vous pouvez créer un objet CSemaphore autonome et y accéder explicitement avant de tenter d'accéder à la ressource contrôlée. Cette méthode, tout adhérent à une personne lisant votre code source, est plus sujette à l'erreur.
Pour plus d'informations sur la façon d'utiliser des objets CSemaphore , consultez l'article Multithreading : comment utiliser les Classes de synchronisation dans le Guide du programmeur Visual C++.
# include lt;afxmt.h>
Membres de la classe |  ; Classe de base | Graphique de la hiérarchie
Écha&ntillonnbsp ; Exemple MFC MUTEXES