एक म्यूटेक्स कई प्रक्रियाओं में लॉक कर सकता है। यह विंडोज फोन में उपयोगी होगा यदि आपके पास एक निर्धारित कार्य चल रहा है जिसके लिए संसाधन के लिए विशेष पहुंच की आवश्यकता है। प्रक्रियाओं में एक म्यूटेक्स को लॉक करने के लिए म्यूटेक्स को एक नाम दिया जाना चाहिए।
एक मॉनीटर केवल एक प्रक्रिया के भीतर लॉक कर सकता है।
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 और हम DoStuff विधि में प्रवेश करने से एक से अधिक अनुसूचित टास्क थ्रेड को रोक सकते हैं। हम मॉनीटर के साथ क्या नहीं कर सकते हैं यह सुनिश्चित करता है कि केवल एक धागा स्थानीय डीबी को एक बार में एक्सेस कर रहा हो।
यह मूल रूप से अंतर है। मॉनिटर की तुलना में मॉनीटर बहुत तेज़ है।
स्रोत
2012-04-25 06:06:40
आप एक मामले में प्रारंभिक रूप से सही सत्य के साथ म्यूटेक्स क्यों बनाते हैं, न कि दूसरे? –
@ जेस्परलेर्सन-लेडेट प्रारंभिकऑनड इंगित करता है कि कॉलिंग थ्रेड में म्यूटेक्स का प्रारंभिक स्वामित्व होना चाहिए या नहीं – onmyway133