Ver Mensaje Individual
  #2  
Antiguo 12-03-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Reputación: 20
cHackAll Va por buen camino
La principal diferencia es que el Mutex es un objeto del kernel y la sección crítica no lo es, lo que tiene como efecto que el Mutex sea accesible por distintos procesos, y el "CriticalSection" no;

Cita:
Empezado por http://msdn2.microsoft.com/en-us/library/aa910712.aspx
A critical section object protects a section of code from being accessed by more than one thread. However, a critical section is limited to only one process or DLL and cannot be shared with other processes.
Esto es corroborable con la forma de inicialización de ambos; para crear una sección crítica se utiliza la API InitializeCriticalSection, la cual inicializa una estructura COMPLEJA. Dicha estructura al pertenecer al proceso el cual la ha iniciado no puede ser compartida entre procesos.

Sin embargo la forma de inicialización de un Mutex (mediante la API CreateMutex), es con un nombre único y global en el sistema. Con dicha idea se puede usar el Mutex para tener una única instancia de una aplicación, lo que es imposible con una sección crítica.

Con dicha idea, tenemos una librería dinámica la cual existe para otorgar funciones a las aplicaciones, sin embargo dicha librería puede (por ejemplo) acceder a un recurso que no debe ser accedido a la vez por otro, sin embargo la librería es cargada en esos momentos por otra aplicacion la cual tambien carga dicha librería y (obviamente), intenta bloquear el recurso.

El anterior caso muestra la ineficiencia del CriticalSection entre varios procesos o DLLs.

Finalmente (y puesto me emocioné con el tema), hay otras consecuencias de que dicho objeto sea o no "propiedad" del kernel, como la velocidad de acceso entre uno y otro (el Mutex es más lento).

Sincronización.

Saludos
Responder Con Cita