Реализация мьютекса и монитора в WP7 Mango
В чем разница между мьютексом и реализацией монитора. Может ли кто-нибудь, пожалуйста, помогите мне изучить оба из них для wp7(реализуемый код для wp7). Пожалуйста, попробуйте добавить некоторые фрагменты кода, которые помогут мне понять методы простым способом. Спасибо заранее Stezma
1 ответ
Мьютекс может блокировать несколько процессов. Это было бы полезно в 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();
}
}
Класс запланированного задания:
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, и мы можем остановить более одного потока Scheduled Task от входа в метод DoStuff. Что мы не можем сделать с монитором, так это убедиться, что только один поток одновременно обращается к локальной БД.
Это в основном разница. Монитор намного быстрее, чем Mutex.