在WP7芒果中实现互斥和监视

Ste*_*Pet 1 windows-phone-7 c#-4.0 windows-phone-7.1

互斥和监视器实现之间有什么区别.任何人都可以帮我学习这两个wp7(wp7的可实现代码).请尝试添加一些代码片段,以帮助我以简单的方式理解这些技术.Thanx提前Stezma

Fas*_*ons 5

互斥锁可以锁定多个进程.如果您运行的计划任务需要对资源的独占访问权限,这在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快得多.