1
互斥和監視器實現有什麼區別。任何人都可以幫助我學習wp7(wp7的可執行代碼)。請嘗試添加一些代碼片段,以簡單的方式幫助我理解這些技術。 Thanx提前 Stezma在WP7中實現互斥和監視芒果
互斥和監視器實現有什麼區別。任何人都可以幫助我學習wp7(wp7的可執行代碼)。請嘗試添加一些代碼片段,以簡單的方式幫助我理解這些技術。 Thanx提前 Stezma在WP7中實現互斥和監視芒果
互斥鎖可以鎖定多個進程。如果您有一個需要對資源進行獨佔訪問的計劃任務,那麼這對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();
}
}
在上面的例子中我們只允許一次訪問一個應用程序本地數據庫資源。這就是我們使用互斥鎖的原因。
監視器實施例(使用鎖語法):
電話應用任務:
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方法。我們無法使用Monitor來確保只有一個線程一次訪問本地數據庫。
這基本上是差異。監視器也比互斥體快得多。
您可以在此閱讀這裏有點(無代碼示例雖然): http://stackoverflow.com/questions/1164038/monitor-vs-mutex-in-c-sharp – Flo
閱讀此http: //stackoverflow.com/questions/800383/what-is-the-difference-between-mutex-and-critical-section你會得到一些想法 – Mahantesh