मैं सोच रहा था: ताला लगा एक कोड क्षेत्रऑटोरसेट Event सी # में लॉक प्रतिस्थापन के रूप में?
दर्ज करें और हैंडल प्रतीक्षा करने के लिए केवल 1 धागा अनुमति देता है संकेतन के लिए है:
सिग्नलिंग जब एक धागा प्रतीक्षा करता है जब तक यह दूसरे से सूचना प्राप्त है।
तो मैंने खुद को सोचा, क्या इसका उपयोग लॉक को प्रतिस्थापित करने के लिए किया जा सकता है?
कुछ की तरह:
Thread number 1 --please enter (autoreset --> autlock)
dowork...
finish work...
set signal to invite the next thread
तो मैं यह लिखा:
/*1*/ static EventWaitHandle _waitHandle = new AutoResetEvent(true);
/*2*/
/*3*/ volatile int i = 0;
/*4*/ void Main()
/*5*/ {
/*6*/
/*7*/ for (int k = 0; k < 10; k++)
/*8*/ {
/*9*/ var g = i;
/*10*/ Interlocked.Increment(ref i);
/*11*/ new Thread(() = > DoWork(g)).Start();
/*12*/
/*13*/ }
/*14*/
/*15*/ Console.ReadLine();
/*16*/ }
/*17*/
/*18*/
/*19*/ void DoWork(object o)
/*20*/ {
/*21*/ _waitHandle.WaitOne();
/*22*/ Thread.Sleep(10);
/*23*/ Console.WriteLine((int) o + "Working...");
/*24*/ _waitHandle.Set();
/*25*/
/*26*/ }
जैसा कि आप देख सकते हैं: लाइनों # 21, # 24 लॉक के लिए प्रतिस्थापन कर रहे हैं।
प्रश्न:
- यह एक वैध प्रतिस्थापन है? (नहीं कि मैं
lock
को प्रतिस्थापित करूंगा, लेकिन उपयोग परिदृश्यों के बारे में जानना चाहता हूं) - मुझे प्रत्येक का उपयोग कब करना चाहिए?
धन्यवाद।
अजीब लेकिन इतना _lock vs EventWaitHandle_
एसओ के समान प्रश्न हैं: http://stackoverflow.com/questions/1717194/autoresetevent-manualresetevent-vs-monitor – empi
@empi हे, सभी 3 शब्द सामान्य संरचना में हैं (monitor.enter बनाम लॉक, ऑटोरेसेट बनाम waithandle ....) लेकिन हाँ यह समान है।हालांकि कृपया ध्यान दें कि 'AutoResetEvent/waithdnales' ** ** प्रक्रियाओं के बीच साझा नहीं किए गए हैं **। म्यूटेक्स के साथ उलझन में लेखक। वैसे भी वह गलत है। (उसके बारे में)। –
@empi एक सेट कमांड होने पर मतभेदों के बारे में सबसे अधिक रेटेड उत्तर वार्ता (मौसम अगर प्रतीक्षा कर रहा है या नहीं)। –