Jes*_*det 6 c# mutex isolatedstorage windows-phone-7 background-agent
根据MSDN前台应用程序和后台代理之间的通信,通过隔离存储中的文件应该受到Mutex的保护.
我能找到的唯一的文章介绍了如何做,这是这一个由迪娜·贝瑞.但是,她似乎只用Mutex保护读取而不是写入.
这样做的正确方法是什么?
互斥锁可以锁定多个进程.如果您运行的计划任务需要对资源的独占访问权限,这在Windows Phone中非常有用.为了跨进程锁定互斥锁,必须为Mutex指定名称.
监视器只能在进程内锁定.
互斥体示例:
电话应用任务:
public class DatabaseService
{
private Mutex _mut=new Mutex("mutex control",false);
public void AddToDatabase(DbObject row)
{
mut.WaitOne();
SaveRow(row);
mut.ReleaseMutex();
}
}
Run Code Online (Sandbox Code Playgroud)
预定任务类:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,我们只允许一个应用程序一次访问本地数据库资源.这就是我们使用Mutex的原因.
监控示例(使用锁定语法):
电话应用任务:
public class DatabaseService
{
private object _locker=new object();
public void AddToDatabase(DbObject row)
{
lock(_locker)
SaveRow(row);
}
}
Run Code Online (Sandbox Code Playgroud)
预定任务类:
public class ResourceUtilisation
{
private object _locker=new object();
//.. does stuff
private static void UseResource()
{
//Go get dataabse and add some rows
lock(_locker)
DoStuff();
}
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我们可以阻止多个应用程序线程进入SaveRow,我们可以阻止多个ScheduledTask线程进入DoStuff方法.我们无法对Monitor执行的操作是确保只有一个线程一次访问本地DB.
这基本上就是差异.Monitor也比Mutex快得多.
归档时间: |
|
查看次数: |
1885 次 |
最近记录: |