Ver Mensaje Individual
  #1  
Antiguo 14-06-2021
ElDuc ElDuc is offline
Miembro
 
Registrado: jul 2004
Posts: 197
Reputación: 20
ElDuc Va por buen camino
Memoria compartida protegida por Mutex

Hola, compis.

Tengo dos procesos creados con Delphi 10 y trabajo con Windows 10, el primero es una aplicación de escritorio A.exe y la otra es una librería B.dll.

Ambos procesos trabajan con memoria compartidad con nombre para compartir información. Esto funciona perfectamente.

Puesto que, en tiempo de ejecución, los 2 procesos se pararán información cada pocos milisegundos, necesito evitar que los dos puedan acceder a la memoria simultaneamente, y para ello he implementado un Mutex con nombre.

El primer proceso declara el mutex de esta forma:
Código Delphi [-]
Mutex:=CreateMutex(Nil,False,MutexName); // Mutex está definido como tHandle.

El segundo proceso declara el mutex de la siguiente forma:

Código Delphi [-]
Mutex:=OpenMutex(SYNCHRONIZE Or MUTEX_MODIFY_STATE, False,MutexName); // Mutex está definido como tHandle.


Cada vez que accedo a la memoria compratida, en ambos procesos:
Código Delphi [-]
WaitForSingleObject(Mutex,INFINITE);
// Acceso a memoria

ReleaseMutex(Mutex);


Aparentemente funciona bien, pero me es imposible comprobar esto en tiempo de depuración porque al poner BreakPoints nunca se produce concurrencia y espera. Por esto tengo una duda. Observo que el valor de Mutex en ambos procesos es diferente, por ejemplo:
A.Mutex=1234
B.Mutex= 874

¿No deberían aer iguales los valores de A.Mutex y B.Mutex, si son handles que apuntan a un mutex con el mismo nombre?
¿Cómo estar seguro de que en realidad es el mismo Mutex en ambos procesos?

Gracias por vuestra colaboración.

ElDuc.
Responder Con Cita