Share via


Clase CMutex

Representa una “exclusión mutua”, que es un objeto de sincronización que permite que un subproceso tenga acceso de manera exclusiva mutua a un recurso.

Sintaxis

class CMutex : public CSyncObject

Miembros

Constructores públicos

Nombre Descripción
CMutex::CMutex Construye un objeto CMutex.

Comentarios

Las exclusiones mutuas son útiles cuando solo se puede permitir que un subproceso a la vez modifique los datos o algún otro recurso controlado. Por ejemplo, agregar nodos a una lista vinculada es un proceso que solo debe permitir un subproceso a la vez. Mediante el uso de un CMutex objeto para controlar la lista vinculada, solo un subproceso a la vez puede obtener acceso a la lista.

Para usar un objeto CMutex, construya el objeto CMutex cuando sea necesario. Especifique el nombre de la exclusión mutua en la que desea esperar y que su aplicación debe poseer inicialmente. A continuación, puede acceder a la exclusión mutua cuando el constructor vuelva. Llamada a CSyncObject::Unlock cuando haya terminado de acceder al recurso controlado.

Un método alternativo para usar objetos CMutex es agregar una variable de tipo CMutex como miembro de datos a la clase que desea controlar. Durante la construcción del objeto controlado, haga una llamada al constructor del miembro de CMutex datos especificando si la exclusión mutua es propiedad inicialmente, el nombre de la exclusión mutua (si se usará en los límites del proceso) y los atributos de seguridad deseados.

Para acceder a los recursos controlados por CMutex objetos de esta manera, primero cree una variable de tipo CSingleLock o escriba CMultiLock en la función miembro de acceso del recurso. A continuación, llame a la función miembro del Lock objeto de bloqueo (por ejemplo, CSingleLock::Lock). En este momento, el subproceso obtendrá acceso al recurso, esperará a que el recurso se libere y obtenga acceso, o esperará a que se libere el recurso y se agote el tiempo de espera, sin obtener acceso al recurso. En cualquier caso, se ha accedido al recurso de forma segura para subproceso. Para liberar el recurso, use la función miembro del Unlock objeto de bloqueo (por ejemplo, CSingleLock::Unlock), o permita que el objeto de bloqueo quede fuera del ámbito.

Para obtener más información sobre el uso CMutex de objetos, consulte el artículo Multithreading: Cómo usar las clases de sincronización.

Jerarquía de herencia

CObject

CSyncObject

CMutex

Requisitos

Encabezado: afxmt.h

CMutex::CMutex

Construye un objeto CMutex con o sin nombre.

CMutex(
    BOOL bInitiallyOwn = FALSE,
    LPCTSTR lpszName = NULL,
    LPSECURITY_ATTRIBUTES lpsaAttribute = NULL);

Parámetros

bInitiallyOwn
Especifica si el subproceso que crea el CMutex objeto inicialmente tiene acceso al recurso controlado por la exclusión mutua.

lpszName
Nombre del objeto CMutex. Si existe otra exclusión mutua con el mismo nombre, se debe proporcionar lpszName si el objeto se usará a través de los límites del proceso. Si es NULL, la exclusión mutua no tendrá nombre. Si el nombre coincide con una exclusión mutua existente, el constructor crea un nuevo CMutex objeto que hace referencia a la exclusión mutua de ese nombre. Si el nombre coincide con un objeto de sincronización existente que no es una exclusión mutua, se producirá un error en la construcción.

lpsaAttribute
Atributos de seguridad para el objeto de exclusión mutua. Para obtener una descripción completa de esta estructura, vea SECURITY_ATTRIBUTES en Windows SDK.

Comentarios

Para acceder o liberar un CMutex objeto, cree un objeto CMultiLock o CSingleLock y llame a sus funciones de miembro Bloquear y Desbloquear. Si el CMutex objeto se usa de forma independiente, llame a su Unlock función miembro para liberarlo.

Importante

Después de crear el CMutex objeto, use GetLastError para asegurarse de que la exclusión mutua aún no existía. Si la exclusión mutua existía inesperadamente, puede indicar que un proceso no autorizado está en ocupación y puede estar intentando usar la exclusión mutua de forma malintencionada. En este caso, el procedimiento recomendado para la seguridad es cerrar el identificador y continuar como si hubiera un error al crear el objeto.

Consulte también

CSyncObject (clase)
Gráfico de jerarquías