वर्तमान में, मैं एक बहुप्रचार परीक्षा के लिए सीख रहा हूं। मैंने the good threading article of albahari पढ़ा। मुझे मॉनिटर उपयोग पर एक प्रश्न है - यहां एक लूप का उपयोग क्यों किया जाता है यदि?मॉनिटर.एट - जबकि या अगर?
lock (_locker)
{
while (!_go) //why while and not if?
Monitor.Wait (_locker); // _lock is released
// lock is regained
...
}
मुझे लगता है कि अगर पर्याप्त होगा।
मुझे डर है, कि मैं पूरी तरह से लेख को समझ नहीं पा रहा हूं।
// संपादित उदाहरण-कोड:
class SimpleWaitPulse
{
static readonly object _locker = new object();
static bool _go;
static void Main()
{ // The new thread will block
new Thread (Work).Start(); // because _go==false.
Console.ReadLine(); // Wait for user to hit Enter
lock (_locker) // Let's now wake up the thread by
{ // setting _go=true and pulsing.
_go = true;
Monitor.Pulse (_locker);
}
}
static void Work()
{
lock (_locker)
while (!_go)
Monitor.Wait (_locker); // Lock is released while we’re waiting
Console.WriteLine ("Woken!!!");
}
}
"अगर" केवल एक बार जांचता है। "जबकि" लूप जांच रखेगा। अगर इंतजार नहीं करता है। इंतजार करते समय। – DOK
हाय DOK - आपके स्पष्टीकरण के लिए धन्यवाद। लेकिन मुझे लगता है, मॉनिटर। वैट ऑपरेशन केवल एक बार निष्पादित किया जाएगा। यह पल्स सिग्नल की प्रतीक्षा करेगा। तो मुझे थोड़ी देर के लिए कोई कारण नहीं दिख रहा है :-( – bitsmuggler
यह कार्यक्रम के शेष पर निर्भर करता है, जैसे कि '_go' का मतलब क्या है, और आप इसे कब सेट करते हैं। – svick