यह सुनिश्चित करने के लिए कि लॉक हमेशा जारी किया जाता है, क्या निम्नलिखित मुहावरे का हमेशा उपयोग किया जाना चाहिए?
हां, जहां उस दायरे ('गैर-तुच्छ सामग्री') के बाद प्रोग्राम की शुद्धता की आवश्यकता होती है, और यह मानते हुए कि आपका प्रोग्राम उन अपवादों से ठीक से ठीक हो सकता है।
क्या इस मुहावरे का उपयोग किया जाना चाहिए? क्यों या क्यों नहीं?
यदि आप पुनर्प्राप्त कर सकते हैं, तो हाँ, अनलॉकिंग सामान्य रूप से निष्पादन जारी रखने के लिए आवश्यक है। अन्यथा, आपका प्रोग्राम अमान्य स्थिति में निष्पादित होगा।
उदाहरण 1: जब ताला (dealloc
के दौरान) नष्ट हो जाता है, प्रयास को नष्ट करने की है क्योंकि यह अभी तक बंद है यह असफल हो जायेगी। क्या कार्यान्वयन लॉक को नष्ट करना जारी रखता है या अनदेखा करता है त्रुटि को परिभाषित नहीं किया जाता है (मैं अनुमान यह जारी रखेगा, जिसका अर्थ है कि यह कभी भी dealloc
से बाहर नहीं निकलेगा)।
उदाहरण 2: जब इसे किसी अन्य धागे से लॉक किया जाता है (या एक ही थ्रेड, अगर पुनर्वित्त नहीं होता है) तो आप कभी भी लॉक प्राप्त नहीं करेंगे और परिणामस्वरूप किसी अन्य त्रुटि, डेडलॉक या अपवाद का उत्पादन किया जा सकता है। एक कार्यान्वयन भी (अंततः) लॉक अधिग्रहण के साथ आगे बढ़ सकता है। गारंटी दी गई सभी को लॉग इन करना है जब त्रुटि मिली है।
pthread_mutex
तों और कार्यान्वयन कि उन पर निर्भर बहुत सुन्दरता अगर आप इस तरह के एक ताला असंतुलन ही व्यवहार नहीं कर सकते; यह हमेशा प्रोग्रामर त्रुटि पर वापस आ जाता है।
शुद्ध ओबीजेसी और सी में सही और रक्षात्मक लॉकिंग बहुत सुंदर नहीं है। जावा मुहावरे सही है, और फाउंडेशन एपीआई के लिए समान रूप से लागू है। कारण यह नहीं है कि आप इसे कर सकते हैं क्योंकि अपवाद कोको एपीआई और जावा (जावा की तुलना में) पर निर्भर करते हुए कम लोकप्रिय/प्रयुक्त त्रुटि हैंडलिंग तंत्र हैं। टिप्पणियां
एक बात उल्लेखनीय है कि कोको में अपवाद की प्रकृति जब अन्य भाषाओं/पुस्तकालयों की तुलना में बल्कि अजीब है। कोको अपवाद (अधिकांश भाग के लिए) स्थितियों में, जहां समस्या अपवाद संचालकों के बिना प्रोग्राम के रूप में रोका जा सकते थे में उठाए गए हैं (उदाहरण के लिएसरणी तत्व पढ़ने से पहले सीमाओं का परीक्षण करके सीमाओं से बाहर) या समस्या शायद ही पुनर्प्राप्त करने योग्य है (उदाहरण के लिए अमान्य चयनकर्ता ऑब्जेक्ट को भेजा गया है, या विंडो सर्वर से कनेक्शन खो गया है)। –
@ बेवारियस हां, अच्छा बिंदु - हम एक ही समय में टाइप कर रहे थे (जब आप अपनी टिप्पणी लिखते थे तो मैं जवाब अपडेट/विस्तार कर रहा था)। – justin