2010-12-04 11 views
10

संभव डुप्लिकेट:
stdout thread-safe in C on Linux?क्या यह थ्रेड में प्रिंटफ को कॉल करने के लिए सुरक्षित है जो एक साथ चल रहा है?

कहो thread1 और thread2 समान और अपनी नौकरी वे दोनों printf के अंत में कर रहे हैं। क्या यह धागा सुरक्षित है या क्या उन्हें प्रिंटफ को किसी भी तरह से लॉक करना है?

क्या यह stdout से संबंधित है? क्या होगा अगर कोई प्रत्येक printf के बाद fflush (stdout) करता है? क्या यह कुछ बदलता है?

+1

देखें http://stackoverflow.com/questions/467938/stdout-thread-safe-in-c-on-linux – icecrime

उत्तर

11

POSIX.1 और सी भाषा कार्यों कि चरित्र पर काम धाराओं को POSIX.1c के लिए आवश्यक हैं कि इस तरह से लागू किया जाना ( प्रकार फ़ाइल की वस्तुओं की ओर इशारा द्वारा प्रतिनिधित्व) reentrancy हासिल किया गया है (आईएसओ/आईईसी 9945 देखें: 1-1996, §8.2)।

करने के लिए Thread-safety and POSIX.1

नोट देखें: कुछ कार्य उनके तर्कों के आधार पर, रैत्रांत या गैर रैत्रांत हो सकता है।

+8

ये फ़ंक्शन * नहीं * पुनर्विक्रेता हैं। वे थ्रेड-सुरक्षित हैं। एक बड़ा अंतर है। फ़ंक्शंस जो पुनर्विक्रेता हैं स्वचालित रूप से थ्रेड-सुरक्षित होते हैं, लेकिन थ्रेड-सुरक्षित फ़ंक्शन अभी भी उसी थ्रेड से फिर से कॉल किए जाने पर डेडलॉक (या बदतर) हो सकते हैं (उदाहरण के लिए सिग्नल हैंडलर से)। –

+0

यहां कुछ और संदर्भ दिए गए हैं: http://www.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html और http://www.opengroup.org/onlinepubs/9699919799/functions/flockfile.html विशेष रूप से देखें उत्तरार्द्ध: "सभी फ़ंक्शंस जो संदर्भ (' FILE * ') ऑब्जेक्ट्स व्यवहार करेंगे जैसे कि वे इन (' FILE * ') ऑब्जेक्ट्स के स्वामित्व प्राप्त करने के लिए आंतरिक रूप से 'flockfile()' और 'funlockfile()' का उपयोग करते हैं।" –

+0

पॉज़िक्स थ्रेड सुरक्षा, पुनर्वितरण और एसिंक सिग्नल सुरक्षित के बीच अलग है। फ़ाइल * फ़ंक्शन एसिंक सिग्नल सुरक्षित नहीं हैं। – nos

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