2009-03-05 9 views
8

एक और क्रॉस-भाषा प्रश्न: क्या कोई मुझे बता सकता है कि सी # थ्रेडिंग जावा पुनर्विक्रेता लॉक और हालत कक्षाओं से सबसे अच्छी तरह से मेल खाता है? ReentrantLock में अनचाहे() और अनलॉक() विधियां हैं, जबकि कंडीशन में सिग्नल() और प्रतीक्षा() विधियां हैं। यह संयोजन है कि मैं सी # कोड में संरक्षित करने में सक्षम होना चाहता हूं - या कुछ ऐसा ही ... अग्रिम धन्यवाद।सी # में जावा रीन्टेंट्रॉक लॉक और हालत में सर्वश्रेष्ठ मैच?

उत्तर

8

मुझे लगता है कि आप जो खोज रहे हैं वह स्थिर Monitor वर्ग है। मैं blocking और non-blocking म्यूटेक्स अधिग्रहण के साथ-साथ condition variable संचालन के लिए अनुमति देता हूं। (वे संकेत और प्रतीक्षा के बजाय Pulse, PulseAll और Wait कहते हैं)।

+0

मेरे लिए काम करने लगता है! धन्यवाद! एक और सवाल: क्या मॉनिटर जावा के समकक्ष प्रदान करता है हेल्डबीक्यूरेंट थ्रेड()? –

+0

नहीं, आप मॉनीटर का विस्तार कर सकते हैं और थ्रेड का संदर्भ रख सकते हैं जिसे अंतिम रूप से एंटर या TryEnter कहा जाता है। वर्तमान धागे को थ्रेड का उपयोग करके एक्सेस किया जा सकता है। कंटेंट थ्रेड: http://msdn.microsoft.com/en-us/library/system.threading.thread.currentthread.aspx –

0

अस्वीकरण: मुझे ये जावा कक्षाएं नहीं पता हैं, मैं यहां अंधेरे में एक स्टैब ले रहा हूं।

सी # में, आपके पास lock कथन है (मुझे लगता है कि यह जावा के synchronized कथन की तरह कुछ है) जो किसी ऑब्जेक्ट को लॉक कर सकता है। मुझे लगता है कि उस कथन का उपयोग करना, या Monitor.Enter(obj) और Monitor.Exit(obj) पुनर्विक्रेता लॉक की तरह थोड़ा होगा।

ManualResetEvent और AutoResetEvent नामक दो वर्ग हैं। इन कक्षाओं में Wait विधि है, और Set विधि है, जो मुझे लगता है कि हालत के सिग्नल और प्रतीक्षा की तरह है। इन दो वर्गों के बीच का अंतर यह है कि ManualResetEvent सेट रहता है (अब किसी को अवरुद्ध नहीं करता है) और Reset होना चाहिए। और AutoResetEvent है - जैसा कि इसके नाम से पता चलता है - स्वचालित रूप से रीसेट करें।

+0

एसिंक स्टेटमेंट में लॉक का उपयोग नहीं कर सकता और मॉनीटर विधियों को कॉल करने की आवश्यकता है सिंक्रनाइज़ेड थ्रेड से .. जावा के पुनर्वित्त लॉक का बिंदु उन मुद्दों को दूर करना है। – Vistritium

+0

इस प्रश्न पूछे जाने पर एसिंक विधियों के रूप में देखकर सी # या जावा में मौजूद नहीं था, मुझे लगता है कि यह शायद ही कभी ReentrantLock का बिंदु है, या कम से कम उस प्रश्नकर्ता का जिक्र नहीं कर रहा था। समानता को इंगित करने के लिए – configurator

1

ReaderWriterLock कक्षा भी देखने लायक होगा। यह जावा में ReentrantReadWriteLock के समान है।

+0

+1। लेकिन एमएसडीएन ने 'रीडरवाइटर लॉक' पर [रीडरवाइटर लॉकस्लिम] (https://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx) का उपयोग करने की सिफारिश की है। – NightOwl888

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