2012-08-04 10 views
6

एक विरोधाभास की तरह लगता है क्योंकि एक सेमफोर को कार्य करने के लिए अवरुद्ध होना चाहिए।गैर अवरोधक सेमफोर क्या है?

इंटरनेट खोज इस अर्थ को परिभाषित करने के लिए कुछ भी उपयोगी नहीं दिखाती है।

+0

शायद वे एक स्पिनलॉक की तरह कुछ का जिक्र कर रहे हैं जो ब्लॉक करने या स्पष्ट रूप से किसी अन्य कार्य पर स्विच करने के लिए उपयोग कोड पर निर्भर करता है? आप इस शब्द का सामना कहाँ करते थे? –

उत्तर

7

यदि एक सेमफोर के पास मूल्य 0 है, तो उस पर एक डाउन ऑपरेशन तब तक अवरुद्ध होगा जब तक कोई संसाधन जारी नहीं करता है और सेमफोर में वृद्धि करता है।

संसाधन अनुपलब्ध होने पर एक गैर-अवरुद्ध सेमफोर डाउन ऑपरेशन पर अवरुद्ध नहीं होता है, बल्कि एक त्रुटि उत्पन्न करता है। यह उपयोगी हो सकता है यदि प्रोग्राम को तुरंत उस संसाधन की आवश्यकता है या निष्पादन को निलंबित किए बिना, और यदि संसाधन उपलब्ध नहीं है, तो प्रोग्राम तर्क कुछ और कर सकता है।

5

एक गैर अवरुद्ध सेमाफोर आम तौर पर एक सेमाफोर जो आप को रोके बिना प्राप्त करने के लिए प्रयास करने के लिए अनुमति देता है को दर्शाता है। अगर सेमफोर को "लॉक" नहीं किया जा सकता है, तो यह असफल हो जाएगा लेकिन ब्लॉक नहीं होगा। अगर इसे लॉक किया जा सकता है, तो यह इसे लॉक कर देगा और सत्य लौटाएगा (यह लॉक हो गया है)।

1

संबंधित प्रतीक्षा ऑपरेशन WaitForSingleObject() उदाहरण के लिए टाइमआउट मान dwMilliseconds निर्दिष्ट करने की अनुमति देता है। यदि यह पैरामीटर 0 पर सेट है तो कॉल का नतीजा हमेशा immede return वापस आ जाएगा। इस तरह से एक सेफफोर की स्थिति को अवरुद्ध किए बिना परीक्षण किया जा सकता है।

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