CMutex, classe
Représente un « mutex » : objet de synchronisation qui permet à un thread d’accéder mutuellement exclusif à une ressource.
Syntaxe
class CMutex : public CSyncObject
Membres
Constructeurs publics
Nom | Description |
---|---|
CMutex ::CMutex | Construit un objet CMutex . |
Notes
Les mutex sont utiles quand un seul thread à la fois peut être autorisé à modifier des données ou une autre ressource contrôlée. Par exemple, l’ajout de nœuds à une liste liée est un processus qui ne doit être autorisé que par un thread à la fois. En utilisant un CMutex
objet pour contrôler la liste liée, un seul thread à la fois peut accéder à la liste.
Pour utiliser un CMutex
objet, construisez l’objet CMutex
quand il est nécessaire. Spécifiez le nom du mutex que vous souhaitez attendre et que votre application doit la posséder initialement. Vous pouvez ensuite accéder au mutex lorsque le constructeur retourne. Appelez CSyncObject ::Unlock lorsque vous avez terminé d’accéder à la ressource contrôlée.
Une autre méthode d’utilisation CMutex
d’objets consiste à ajouter une variable de type CMutex
en tant que membre de données à la classe que vous souhaitez contrôler. Lors de la construction de l’objet contrôlé, appelez le constructeur du CMutex
membre de données spécifiant si le mutex appartient initialement, le nom du mutex (s’il sera utilisé entre les limites du processus) et les attributs de sécurité souhaités.
Pour accéder aux ressources contrôlées par CMutex
les objets de cette façon, créez d’abord une variable de type CSingleLock ou de type CMultiLock dans la fonction membre d’accès de votre ressource. Appelez ensuite la fonction membre de l’objet Lock
lock (par exemple, CSingleLock ::Lock). À ce stade, votre thread accède à la ressource, attend la publication et l’accès à la ressource, ou attend que la ressource soit libérée et expire, et ne parvient pas à accéder à la ressource. Dans tous les cas, votre ressource a été accessible de manière thread-safe. Pour libérer la ressource, utilisez la fonction membre de l’objet Unlock
lock (par exemple, CSingleLock ::Unlock) ou autorisez l’objet de verrouillage à sortir de l’étendue.
Pour plus d’informations sur l’utilisation d’objets CMutex
, consultez l’article Multithreading : Utilisation des classes de synchronisation.
Hiérarchie d'héritage
CMutex
Spécifications
En-tête : afxmt.h
CMutex ::CMutex
Construit un objet nommé ou non nommé CMutex
.
CMutex(
BOOL bInitiallyOwn = FALSE,
LPCTSTR lpszName = NULL,
LPSECURITY_ATTRIBUTES lpsaAttribute = NULL);
Paramètres
bInitiallyOwn
Spécifie si le thread qui crée l’objet CMutex
a initialement accès à la ressource contrôlée par le mutex.
lpszName
Nom de l'objet CMutex
. Si un autre mutex portant le même nom existe, lpszName doit être fourni si l’objet sera utilisé entre les limites du processus. Si la valeur est NULL, le mutex n’est pas nommé. Si le nom correspond à un mutex existant, le constructeur génère un nouvel CMutex
objet qui fait référence au mutex de ce nom. Si le nom correspond à un objet de synchronisation existant qui n’est pas un mutex, la construction échoue.
lpsaAttribute
Attributs de sécurité pour l’objet mutex. Pour obtenir une description complète de cette structure, consultez SECURITY_ATTRIBUTES dans le Kit de développement logiciel (SDK) Windows.
Notes
Pour accéder ou libérer un CMutex
objet, créez un objet CMultiLock ou CSingleLock et appelez ses fonctions de membre Lock et Unlock. Si l’objet CMutex
est utilisé autonome, appelez sa Unlock
fonction membre pour la libérer.
Important
Après avoir créé l’objet CMutex
, utilisez GetLastError pour vous assurer que le mutex n’existait pas déjà. Si le mutex existait de façon inattendue, il peut indiquer qu’un processus non autorisé est en squattage et qu’il est susceptible d’utiliser le mutex malveillantment. Dans ce cas, la procédure recommandée pour la sécurité consiste à fermer le handle et à continuer comme s’il y avait un échec dans la création de l’objet.