Реализация мьютекса и монитора в WP7 Mango - PullRequest
1 голос
/ 03 октября 2011

в чем разница между мьютексом и реализацией монитора.Может ли кто-нибудь, пожалуйста, помогите мне изучить оба из них для wp7 (реализуемый код для wp7).Пожалуйста, попробуйте добавить некоторые фрагменты кода, которые помогут мне понять методы простым способом.Спасибо заранее Stezma

1 Ответ

5 голосов
/ 21 ноября 2011

Мьютекс может блокировать несколько процессов. Это было бы полезно в Windows Phone, если у вас запущена запланированная задача, требующая эксклюзивного доступа к ресурсу. Для блокировки мьютекса между процессами Mutex должно быть присвоено имя.

Монитор может блокироваться только внутри процесса.

Mutex Пример:

Задача приложения телефона:

   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();
    }
    }

В приведенном выше примере мы разрешаем только одному приложению одновременно доступ к локальному ресурсу базы данных. Вот почему мы использовали Mutex.

Пример монитора (с использованием синтаксиса блокировки):

Задача приложения телефона:

   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. Что мы не можем сделать с монитором, так это убедиться, что только один поток одновременно обращается к локальной БД.

В этом и заключается разница. Монитор намного быстрее, чем Mutex.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...