Share via


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

CObject

CSyncObject

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.

Voir aussi

CSyncObject, classe
Graphique hiérarchique