c# - pasar - planes compartidos
Protección de datos compartidos de almacenamiento entre la aplicación y el agente de fondo (1)
Un mutex puede bloquearse en múltiples procesos. Esto sería útil en Windows Phone si tiene una tarea programada en ejecución que necesita acceso exclusivo a un recurso. Para bloquear un mutex en todos los procesos, se debe dar un nombre a Mutex.
Un monitor puede bloquear solo dentro de un proceso.
Ejemplo Mutex:
Tarea de la aplicación del teléfono:
public class DatabaseService
{
private Mutex _mut=new Mutex("mutex control",false);
public void AddToDatabase(DbObject row)
{
mut.WaitOne();
SaveRow(row);
mut.ReleaseMutex();
}
}
Clase de tarea programada:
public class ResourceUtilisation
{
private Mutex _mut=new Mutex("mutex control",true);
//.. does stuff
private static void UseResource()
{
// Wait until it is safe to enter.
_mut.WaitOne();
//Go get dataabse and add some rows
DoStuff();
// Release the Mutex.
_mut.ReleaseMutex();
}
}
En el ejemplo anterior, solo permitimos el acceso a una aplicación a la vez al recurso de base de datos local. Es por eso que usaríamos un Mutex.
Ejemplo de monitor (usando la sintaxis de bloqueo):
Tarea de la aplicación del teléfono:
public class DatabaseService
{
private object _locker=new object();
public void AddToDatabase(DbObject row)
{
lock(_locker)
SaveRow(row);
}
}
Clase de tarea programada:
public class ResourceUtilisation
{
private object _locker=new object();
//.. does stuff
private static void UseResource()
{
//Go get dataabse and add some rows
lock(_locker)
DoStuff();
}
}
En este ejemplo, podemos detener más de un subproceso de aplicación que ingrese SaveRow y podemos detener el ingreso de más de un subproceso de ScheduledTask al método DoStuff. Lo que no podemos hacer con un Monitor es garantizar que solo un hilo acceda al DB local de una vez.
Esa es básicamente la diferencia. El monitor es mucho más rápido que un Mutex también.
De acuerdo con la comunicación de MSDN entre la aplicación en primer plano y los agentes de fondo a través de archivos en el almacenamiento aislado, debe estar protegido por un Mutex.
El único artículo que puedo encontrar que describe cómo hacerlo es este de Dina Berry. Sin embargo, ella solo parece proteger las lecturas con el Mutex y no con las escrituras.
¿Cuál es la forma correcta de hacer esto?