保护应用和后台代理之间的共享 isostorage 数据
本文关键字:共享 isostorage 数据 之间 代理 应用 后台 保护 | 更新日期: 2023-09-27 18:31:14
根据 MSDN,前台应用和后台代理之间通过独立存储中的文件进行的通信应受互斥体保护。
我能找到的唯一一篇描述如何做到这一点的文章是迪娜·贝瑞(Dina Berry)的这篇文章。但是,她似乎只使用互斥体保护读取,而不是写入。
正确的方法是什么?
互斥锁可以锁定多个进程。这在 Windows Phone 中非常有用,如果您正在运行的计划任务需要对资源进行独占访问。为了跨进程锁定互斥锁,必须为互斥锁指定一个名称。
监视器只能在进程中锁定。
互斥示例:
手机应用任务:
public class DatabaseService
{
private Mutex _mut=new Mutex("mutex control",false);
public void AddToDatabase(DbObject row)
{
mut.WaitOne();
SaveRow(row);
mut.ReleaseMutex();
}
}
计划任务类:
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();
}
}
在上面的示例中,我们一次只允许一个应用访问本地数据库资源。这就是我们使用互斥锁的原因。
监视器示例(使用锁定语法):
手机应用任务:
public class DatabaseService
{
private object _locker=new object();
public void AddToDatabase(DbObject row)
{
lock(_locker)
SaveRow(row);
}
}
计划任务类:
public class ResourceUtilisation
{
private object _locker=new object();
//.. does stuff
private static void UseResource()
{
//Go get dataabse and add some rows
lock(_locker)
DoStuff();
}
}
在此示例中,我们可以阻止多个应用程序线程进入 SaveRow,并且可以阻止多个 ScheduledTask 线程进入 DoStuff 方法。我们不能用监视器做的是确保一次只有一个线程访问本地数据库。
这基本上就是区别。监视器也比互斥体快得多。