CSemaphore

Un objeto de clase CSemaphore representa un "semáforo": un objeto de sincronización que permite un número limitado de subprocesos en uno o más procesos para acceder a un recurso. Un objeto CSemaphore mantiene un recuento del número de subprocesos actualmente acceder a un recurso especificado.

Semáforos son útiles para controlar el acceso a un recurso compartido que sólo puede admitir un número limitado de usuarios. El recuento actual del objeto CSemaphore es el número de usuarios adicionales permitidos. Cuando el contador llega a cero, todos los intentos de utilizar los recursos controlados por el objeto CSemaphore se insertará en una cola de sistema y espere hasta que o bien fuera de tiempo o el número se eleva por encima de 0. Se especifica el número máximo de usuarios que pueden acceder al recurso controlado simultáneamente durante la construcción del objeto CSemaphore.

Para utilizar un objeto CSemaphore , construir el objeto CSemaphore cuando es necesario. Especificar el nombre del semáforo desea esperar, y que su aplicación debe inicialmente propio de TI. A continuación, puede acceder el semáforo cuando vuelva el constructor. Llame a CSyncObject::Unlock cuando haya terminado de acceder a los recursos controlados.

Un método alternativo para utilizar objetos de CSemaphore es agregar una variable de tipo CSemaphore como un miembro de datos a la clase que desea controlar. Durante la construcción del objeto controlado, llamar al constructor de los miembros de datos de CSemaphore especificando el recuento inicial de acceso, recuento máximo de acceso, nombre de semáforo (si se utilizará a través de límites de proceso) y desea atributos de seguridad.

Para acceder a recursos controlado por CSemaphore objetos de esta manera, primero cree una variable de cualquier tipo de CSingleLock o escriba CMultiLock en función de miembro de acceso del recurso. A continuación, llamar a función miembro de bloqueo del objeto de bloqueo (por ejemplo, CSingleLock::Lock). En este punto, su hilo será obtener acceso al recurso, espere a que el recurso a liberarse y obtener acceso o esperar a que los recursos para ser lanzado y fuera de tiempo, no tener acceso al recurso. En cualquier caso, el recurso ha sido visitado de una manera segura para los subprocesos. Para liberar el recurso, utilice la función miembro de desbloqueo del objeto de bloqueo (por ejemplo, CSingleLock::Unlock) o permitir que caen fuera del ámbito el objeto de bloqueo.

Alternativamente, puede crear un objeto CSemaphore independiente y acceso explícitamente antes de intentar obtener acceso al recurso controlado. Este método, mientras clara a alguien leyendo su código fuente, es más propenso a errores.

Para obtener más información sobre cómo utilizar CSemaphore objetos, consulte el artículo subprocesamiento múltiple: cómo usar las clases de sincronización en la Guía del programador de Visual C++.

# include lt;afxmt.h>

Miembros de la claseClase base | Diagrama de jerarquía

Muestra  Ejemplo de MFC SEMÁFOROS

Index