मुझे एक प्रोग्राम मिला है जो कई धागे का उपयोग करता है। जैसा कि मैं इसे समझता हूं, जब थ्रेड 0 निकलता है, तो पूरा प्रोग्राम बाहर निकलता है, भले ही किसी भी अन्य धागे जो अभी भी चल रहे हों।हास्केल प्रोग्राम से बाहर निकलने का सबसे अच्छा तरीका क्या है?
बात यह है कि, इन अन्य धागे में फाइलें खुली हो सकती हैं। स्वाभाविक रूप से, यह अपवाद-हैंडलिंग कोड में लपेटा गया है जो किसी समस्या के मामले में फ़ाइलों को साफ़ रूप से बंद कर देता है। इसका अर्थ यह भी है कि यदि मैं killThread
(जिसे throwTo
के माध्यम से कार्यान्वित किया गया है) का उपयोग करते हैं, तो फ़ाइल थ्रेड से बाहर होने से पहले बंद होनी चाहिए।
मेरा सवाल है, अगर मैं अन्य थ्रेड को रोकने के प्रयास के बिना थ्रेड 0 बाहर निकलने देता हूं, तो क्या सभी विभिन्न फाइल हैंडल अच्छी तरह से बंद हो जाएंगे? क्या कोई buffered आउटपुट flushed हो जाता है?
संक्षेप में, क्या मैं बस बाहर निकल सकता हूं, या क्या मुझे पहले धागे को मैन्युअल रूप से मारने की आवश्यकता है?
मैं अच्छी प्रोग्रामिंग स्वच्छता के मामले के रूप में अन्य धागे को साफ करने के लिए 'killThread' या' exit 'पर भरोसा नहीं करना पसंद करता हूं। मैं मुख्य धागे से साफ-सफाई संकेतों को सुनने के लिए अपने सभी धागे का वाद्य यंत्र करता हूं ताकि वे सभी को गहराई से बंद कर दिया जा सके। –
क्यों कोशिश नहीं करते? आईएमई, अधिकांश ओएस फाइलों को बंद कर देगा, (यानी कोई संभाल, एफडी या अन्य रिसाव छोड़ें), लेकिन बकाया I/O फ़्लश नहीं किया जाएगा। –
@ गैब्रियल गोंज़ालेज़ यदि आप इसे इस तरह से करते हैं, तो इसका मतलब है कि एक धागा केवल कुछ बिंदुओं पर समाप्त हो जाएगा।यदि आप नियमित रूप से पर्याप्त रूप से जांचना भूल जाते हैं, या कुछ अपेक्षा से अधिक समय लेता है, तो आप एक ऐसी स्थिति प्राप्त कर सकते हैं जहां आप धागे को मरने के संकेत देते हैं, और यह नहीं (या वास्तव में बहुत लंबा समय लगता है)। आपको अपवादों को किसी भी तरह से संभालने की ज़रूरत है, तो क्यों 'killThread' का उपयोग न करें? – MathematicalOrchid