2008-10-16 11 views
47

मुझे पता है कि आप लॉक का उपयोग कर किसी ऑब्जेक्ट को सी # में लॉक कर सकते हैं, लेकिन क्या आप लॉक छोड़ सकते हैं और आपको यह सूचित करने के लिए कुछ और इंतजार कर सकते हैं कि यह बदल गया है जैसे आप जावा में प्रतीक्षा कर सकते हैं और सूचित कर सकते हैं?सी # जावा के इंतजार के बराबर और सूचित करें?

ऐसा लगता है कि क्रमशः जावा और सी # में सिंक्रनाइज़ और लॉक समानार्थी हैं।

उत्तर

86

बराबर कार्यक्षमता (सामान्य लॉकिंग समेत) Monitor कक्षा में है।

foo.notify() => Monitor.Pulse(foo) 
foo.notifyAll() => Monitor.PulseAll(foo) 
foo.wait() => Monitor.Wait(foo) 

सी # में lock बयान/अंत में ब्लॉक के लिए एक उपयुक्त कोशिश के साथ Monitor.Enter और Monitor.Exit बुला के बराबर है।

अधिक जानकारी के लिए my threading tutorial या Joe Albahari's one देखें।

+0

जावा एपीआई से: प्रतीक्षा करें() - मौजूदा थ्रेड का इंतजार तब तक प्रतीक्षा करें जब तक कि कोई अन्य धागा इस ऑब्जेक्ट के लिए अधिसूचना() विधि या अधिसूचना सभी() विधि को आमंत्रित न करे। आपका ट्यूटोरियल यह कह रहा है कि Monitor.Wait() केवल तभी प्रतीक्षा करता है जब कोई अन्य थ्रेड लॉक के लिए संघर्ष कर रहा हो। –

+0

@ebyrob: यह कहां सुझाता है? –

+0

ओह क्षमा करें, यह एमएसडीएन आलेख था जो मुझे भ्रमित करता था: http://msdn.microsoft.com/en-us/library/system.threading.monitor.wait%28v=vs.71%29.aspx यह कहता है "//रुको, अगर कतार व्यस्त है। कॉल करने से पहले: Monitor.Wait (m_smplQueue); " मैं एक ही समय में दोनों पढ़ रहा था और किसके बारे में भ्रमित हो गया। –

1

मुझे लगता है कि प्रतीक्षा हैंडल आपके लिए काम कर सकती है। देखें कि this मदद करता है या नहीं।

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