Usar objetos con nombre
En el ejemplo siguiente se muestra el uso de nombres de objeto mediante la creación y apertura de una exclusión mutua con nombre.
Primer proceso
El primer proceso usa la función CreateMutex para crear el objeto de exclusión mutua. Tenga en cuenta que esta función se realiza correctamente incluso si hay un objeto existente con el mismo nombre.
#include <windows.h>
#include <stdio.h>
#include <conio.h>
// This process creates the mutex object.
int main(void)
{
HANDLE hMutex;
hMutex = CreateMutex(
NULL, // default security descriptor
FALSE, // mutex not owned
TEXT("NameOfMutexObject")); // object name
if (hMutex == NULL)
printf("CreateMutex error: %d\n", GetLastError() );
else
if ( GetLastError() == ERROR_ALREADY_EXISTS )
printf("CreateMutex opened an existing mutex\n");
else printf("CreateMutex created a new mutex.\n");
// Keep this process around until the second process is run
_getch();
CloseHandle(hMutex);
return 0;
}
Segundo proceso
El segundo proceso usa la función OpenMutex para abrir un identificador a la exclusión mutua existente. Esta función produce un error si no existe un objeto de exclusión mutua con el nombre especificado. El parámetro de acceso solicita acceso total al objeto de exclusión mutua, que es necesario para que el identificador se use en cualquiera de las funciones de espera.
#include <windows.h>
#include <stdio.h>
// This process opens a handle to a mutex created by another process.
int main(void)
{
HANDLE hMutex;
hMutex = OpenMutex(
MUTEX_ALL_ACCESS, // request full access
FALSE, // handle not inheritable
TEXT("NameOfMutexObject")); // object name
if (hMutex == NULL)
printf("OpenMutex error: %d\n", GetLastError() );
else printf("OpenMutex successfully opened the mutex.\n");
CloseHandle(hMutex);
return 0;
}
Temas relacionados