2009-10-12 16 views
16

सी # में म्यूटेक्स और सेमफोर क्या है? हमें कहां लागू करने की जरूरत है?म्यूटेक्स और सेमफोर सी # में क्या है? जहां हमें लागू करने की आवश्यकता है?

हम multithreading में उनके साथ कैसे काम कर सकते हैं?

+5

आईएमएचओ का जवाब देने के लिए यह एक बहुत बड़ा विषय है..क्या आपके पास कोई विशिष्ट समस्या है? – Naveen

+0

नवीन कृपया मुझे कुछ विघटित प्रश्न सुझाएं ताकि मैं इसमें खोद सकूं .. –

उत्तर

27

आपको एमएसडीएन में शुरू करना चाहिए।

  • System.Threading.Mutex: एक सिंक्रनाइज़ेशन आदिम जो इंटरप्रोसेस सिंक्रनाइज़ेशन के लिए भी उपयोग किया जा सकता है।
  • System.Threading.Semaphore: संसाधनों या संसाधनों के पूल को समेकित रूप से एक्सेस करने वाले धागे की संख्या सीमित करता है।

आम तौर पर आप केवल प्रक्रियाओं में एक म्यूटेक्स का उपयोग करते हैं, उदाहरण के लिए यदि आपके पास कोई संसाधन है जो एकाधिक अनुप्रयोगों को साझा करना चाहिए, या यदि आप एक एकल-इंस्टॉलेशन ऐप बनाना चाहते हैं (यानी केवल एक प्रति को एक ही समय में चलने की अनुमति दें)।

एक सेमफोर आपको एक साथ थ्रेड की एक विशिष्ट संख्या तक पहुंच सीमित करने की अनुमति देता है, ताकि आप एक समय में एक विशिष्ट कोड पथ निष्पादित करने वाले अधिकतम दो धागे प्राप्त कर सकें।

+5

एमएसडीएन के लिए +1। यह विंडोज एपीआई स्पेस में सबकुछ के लिए आरटीएफएम-गोटो है। –

+0

सेमफोरों का उपयोग पूरे प्रक्रियाओं को सिंक्रनाइज़ करने के लिए भी किया जा सकता है। "नामित सिस्टम सेमफोर ऑपरेटिंग सिस्टम में दिखाई दे रहे हैं, और प्रक्रियाओं की गतिविधियों को सिंक्रनाइज़ करने के लिए उपयोग किया जा सकता है": https://msdn.microsoft.com/en-us/library/ system.threading.semaphore (v = vs.110) .aspx –

5

आप लॉक स्टेटमेंट देखना चाहते हैं। यह Monitor.Enter और Monitor.Exit फोन करके सी #

class Test { 
    private static object Lock = new object(); 

    public function Synchronized() 
    { 
     lock(Lock) 
     { 
      // Only one thread at a time is able to enter this section 
     } 
    } 
} 

ताला बयान कार्यान्वित किया जाता है में धागा synchonization कार्यों के विशाल बहुमत संभाल कर सकते हैं। यह निम्न कोड के बराबर है:

Monitor.Enter(Lock);  
try 
{ 
    // Only one thread at a time is able to enter this section 
} 
finally 
{ 
    Monitor.Exit(Lock); 
} 
+2

अच्छा उत्तर, और संभावित रूप से उपयोगी, लेकिन वास्तव में उत्पन्न प्रश्न का उत्तर नहीं। एक -1 के बारे में सोचा, लेकिन इस टिप्पणी पर छोड़ दिया। ;-) – peSHIr

+0

वैसे कार्यान्वयन सी # 5.0 में बदल गया है :) – KadekM

संबंधित मुद्दे