निर्माता/उपभोक्ता को कोड करने का "सही" तरीका उपभोक्ता के डेटा के लिए उपभोक्ता का इंतजार करना है। आप एक म्यूटेक्स जैसे सिंक्रनाइज़ेशन ऑब्जेक्ट का उपयोग कर इसे प्राप्त कर सकते हैं। उपभोक्ता Wait
म्यूटेक्स पर होगा, जो डेटा उपलब्ध होने तक इसे निष्पादित करने से रोकता है। बदले में, उत्पादक उपलब्ध होने पर निर्माता म्यूटेक्स को संकेत देगा, जो उपभोक्ता धागे को जगाएगा ताकि यह प्रसंस्करण शुरू हो सके। यह दोनों के संदर्भ में sleep
तुलना में अधिक कुशल है:
- CPU उपयोग (कोई चक्र बर्बाद हो जाते हैं), और
- भागो समय (निष्पादन डेटा प्राप्त होते ही उपलब्ध है, जब नहीं एक धागा जगाने के लिए निर्धारित है शुरू होता है तक)।
यह कहा गया है कि यहां उपज बनाम नींद का विश्लेषण है जिसे आपने पूछा था। आउटपुट के लिए इंतजार करने के किसी कारण से आपको ऐसी योजना का उपयोग करने की आवश्यकता हो सकती है:
यह निर्भर करता है कि आप कितना ट्रैफिक प्राप्त कर रहे हैं - यदि डेटा लगातार प्राप्त किया जा रहा है और संसाधित किया जाता है, तो आप उपज करने पर विचार कर सकते हैं। हालांकि ज्यादातर मामलों में इसका परिणाम "व्यस्त" लूप होगा जो इसके अधिकांश समय को थ्रेड को जागृत करने के लिए खर्च करता है ताकि यह जांच सके कि कुछ भी तैयार है या नहीं।
आप शायद थोड़े समय के लिए सो सकते हैं (शायद usleep
का उपयोग करके, एक सेकंड से भी कम समय के लिए) या सिंक्रनाइज़ेशन ऑब्जेक्ट का उपयोग करने के लिए बेहतर है जैसे कि म्यूटेक्स को संकेत मिलता है कि डेटा उपलब्ध है।
स्रोत
2010-04-19 15:19:48
न तो, आप इसे अवरुद्ध करना चाहते हैं। Google "बाध्य बफर"। –