मुझे पता है कि अगर मेरे पास putStrLn
पर किसी भी तरह के समेकन नियंत्रण के बिना कई धागे हैं जो धागे के आउटपुट को अंतःस्थापित किया जा सकता है।putStrLn धागा-सुरक्षित है?
मेरा सवाल यह है कि putStrLn
इस इंटरलीव्ड आउटपुट थ्रेड-सुरक्षित मॉड्यूलो है?
मुझे लगता है कि putStrLn
एक बफर किए गए लेखन ऑपरेशन है, इसलिए मैं वास्तव में पूछ रहा हूं कि आउटपुट बफर का कोई भ्रष्टाचार दो थ्रेड होने पर putStrLn
पर कॉल कर सकता है।
और सामान्य रूप से, हास्केल (वास्तव में जीएचसी) के अन्य "मानक I/O" कार्यों की थ्रेड सुरक्षा के बारे में क्या कहा जा सकता है? विशेष रूप से, किसी भी बफर किए गए पढ़ने के संचालन के लिए क्या एक ही चरित्र के लिए एक ही समय में एक ही पठन कॉल करने के लिए दो अलग-अलग धागे पर वापस जाना संभव है?
मुझे नहीं लगता कि मैंने कभी ऐसी लाइब्रेरी के बारे में सुना है जिसका स्टडआउट आउटपुट थ्रेड-सुरक्षित नहीं है (मैं सामान्य सी/सी ++ रनटाइम, सी #, जावा इत्यादि के बारे में सोच रहा हूं) तो अगर मुझे करना पड़ा एक अनुमान लगाओ मैं कहूंगा कि यह भी ठीक है। हालांकि अच्छा सवाल +1। – Mehrdad
लिनक्स 'putStrLn' पर और दोस्तों ['write'] (http://linux.die.net/man/2/write) के माध्यम से लागू किए गए और [' select'] (http://linux.die.net/man/2/चयन करें) एक निश्चित लंबाई के ब्लॉक के लिए जोड़े (जब लाइन- या ब्लॉक-बफरिंग के साथ), तो सवाल यह है कि 'लिखना' थ्रेड-सुरक्षित है या नहीं। POSIX को 'लिखने' (1003.1-2001: 2.9.1 और 2.9.7) के लिए थ्रेड-सुरक्षा की आवश्यकता होती है, और आमतौर पर यह होती है। – JJJ
और 'MVar' ताले ['futex'] (http://linux.die.net/man/4/futex) के साथ कार्यान्वित किए गए (जब' थ्रेडेड 'रनटाइम के साथ)। तो @ शचाफ जवाब सही है। – JJJ