Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-06-2021
ElDuc ElDuc is offline
Miembro
 
Registrado: jul 2004
Posts: 197
Poder: 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
  #2  
Antiguo 16-06-2021
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
El Mutex es único pero su Handle puede ser distinto para cada aplicación. No se debe contundir el Mutex con su Handle.


Saludos.
Responder Con Cita
  #3  
Antiguo 18-06-2021
ElDuc ElDuc is offline
Miembro
 
Registrado: jul 2004
Posts: 197
Poder: 20
ElDuc Va por buen camino
Talking

Muchas gracias Escafandra.

Sólo era una duda teórica, ya que el sistema me funciona perfectamente.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Mutex Global gluglu API de Windows 2 19-12-2013 20:22:01
TCriticalSection vs Mutex rolandoj Varios 2 13-03-2008 01:04:47
Memoria Compartida. Shared Memory escafandra C++ Builder 6 28-02-2008 17:47:40
Memoria compartida y semáforos Duc API de Windows 2 03-02-2007 22:31:45
CreateFileMapping (memoria compartida) Al González API de Windows 2 18-12-2003 15:04:44


La franja horaria es GMT +2. Ahora son las 12:59:11.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi