विशेष रूप से समाधान करने के लिए क्यों कई waitsets होने एक फायदा है:
प्रतीक्षा के साथ
/सूचित अगर वहाँ अलग अलग चीजें हैं जो धागे के लिए इंतजार कर रहे हैं कर रहे हैं (सामान्य उदाहरण एक निश्चित आकार अवरुद्ध कतार है, कुछ धागे में बातें डाल के साथ कतार भरने पर कतार और अवरोधन, और कतार से निकलने वाले अन्य थ्रेड और कतार खाली होने पर अवरुद्ध होने पर) यदि आप अधिसूचना का उपयोग करते हैं, तो शेड्यूलर को प्रतीक्षा सेट से एक धागा चुनने के लिए सूचित करने के कारण, आप कोने के मामले हो सकते हैं जहां चयनित धागा किसी विशेष स्थिति के लिए अधिसूचित होने में रूचि नहीं रखता है। उदाहरण के लिए कतार कतार में कुछ जोड़ने के लिए सूचित करेगी, लेकिन यदि चयनित धागा एक निर्माता है और कतार पूर्ण है तो यह उस अधिसूचना पर कार्य नहीं कर सकता है, जिसे आप उपभोक्ता के पास जाना चाहते थे। आंतरिक लॉकिंग के साथ आपको यह सुनिश्चित करने के लिए अधिसूचनाओं का उपयोग करना होगा कि अधिसूचनाएं खो नहीं जाती हैं।
लेकिन सूचित करें सभी कॉल प्रत्येक कॉल के साथ मंथन करते हैं, जहां हर धागा जागता है और ताला के लिए संघर्ष करता है, लेकिन केवल कोई प्रगति कर सकता है। अन्य धागे सभी लॉक के लिए चारों ओर घूमते हैं, एक बार में, वे लॉक प्राप्त कर सकते हैं और अधिकतर प्रतीक्षा करने के लिए वापस जाते हैं। यह बहुत अधिक लाभ के लिए बहुत अधिक विवाद उत्पन्न करता है, यह अधिसूचना का उपयोग करने में सक्षम होना बेहतर होगा और केवल एक धागा अधिसूचित किया जाना चाहिए, जहां अधिसूचना उस धागे से प्रासंगिक है।
यह वह जगह है जहां प्रतीक्षा करने के लिए अलग-अलग स्थितियां एक बड़ी सुधार है। कतार एक शर्त पर सिग्नल का आह्वान कर सकती है और पता है कि यह केवल एक धागा जगाएगा, जहां वह धागा विशेष रूप से इस स्थिति की प्रतीक्षा कर रहा है।
API doc for Condition एक कोड उदाहरण है कि एक घिरे बफर के लिए कई शर्तों का उपयोग से पता चलता है, यह कहते हैं:
हम डाल धागे इंतज़ार कर रखने के लिए और अलग प्रतीक्षा-सेटों में धागे ले ताकि हम उपयोग कर सकते हैं करना चाहते हैं केवल एक ही धागे को सूचित करने का अनुकूलन जब आइटम या रिक्त स्थान बफर में उपलब्ध हो जाते हैं।
स्रोत
2017-04-21 15:27:50
सिस्टम घड़ी में परिवर्तन होने पर प्रतीक्षा (दिनांक की समयसीमा) का व्यवहार बदल जाएगा, जबकि यह प्रतीक्षा के लिए नहीं हो सकता है (लंबे समय में InMilliseconds) –