2011-10-03 34 views
1

互斥和監視器實現有什麼區別。任何人都可以幫助我學習wp7(wp7的可執行代碼)。請嘗試添加一些代碼片段,以簡單的方式幫助我理解這些技術。 Thanx提前 Stezma在WP7中實現互斥和監視芒果

+0

您可以在此閱讀這裏有點(無代碼示例雖然): http://stackoverflow.com/questions/1164038/monitor-vs-mutex-in-c-sharp – Flo

+0

閱讀此http: //stackoverflow.com/questions/800383/what-is-the-difference-between-mutex-and-critical-section你會得到一些想法 – Mahantesh

回答

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

計劃任務等級:

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來確保只有一個線程一次訪問本地數據庫。

這基本上是差異。監視器也比互斥體快得多。