2010-02-23 17 views
5

inet_aton थ्रेड-सेफ है? मुझे यूएनपी के अनुसार पता है कि पीओएसईक्स को बहुत से सॉकेट एपीआई को थ्रेड सुरक्षित होने की आवश्यकता नहीं है, और इसलिए मुझे लगता है कि वे नहीं हैं, लेकिन आम तौर पर मुझे कैसे पता चलेगा कि पर्ल में कुछ थ्रेड सुरक्षित है या नहीं? लाइब्रेरी फ़ंक्शन को लॉक करने के लिए मुझे किस हद तक कॉल करना होगा? और मैं उन्हें कैसे लॉक करूं? जब मैं lock(&inet_aton) जैसे कुछ कोशिश करता हूं तो यह मुझे एक त्रुटि देता है: Can't modify non-lvalue subroutine call in lockक्या पर्ल की inet_aton थ्रेड-सुरक्षित है?

और हाँ, मैं पढ़ा है: Thread-Safety of System Libraries

उत्तर

2

आप पढ़ सकते हैं inet_aton manpage ध्यान से आप इस प्रकार कि यह कॉल किसी भी साझा राज्य (inet_ntoa समारोह एक ही मैनपेज में वर्णित के विपरीत) का उपयोग नहीं करता देखेंगे, और धागा सुरक्षित होना चाहिए।

कि फ़ंक्शन एक कॉलर-प्रदान की गई संरचना में अपना परिणाम लिखता है, इसका भी समर्थन करता है।

पर्ल a thin wrapper on top of those functions का उपयोग करता है और इस प्रकार अंतर्निहित लाइब्रेरी की थ्रेड सुरक्षा को नहीं बदलता है।

+0

तो सामान्य रूप से, मैं लाइब्रेरी कॉल के संबंध में थ्रेड सुरक्षा का मूल्यांकन कैसे करूं? मैंने इसे पॉज़िक्स में पुनर्वितरण के बारे में पढ़ा: http://www.unix.org/whitepapers/reentrant.html ऐसा लगता है कि स्थिर डेटा/राज्य को मुख्य चीज़ के रूप में देखना है। मुझे लगता है कि मुझे func आधार द्वारा बस एक func पर जांच करने की जरूरत है। तो अगर मुझे उदाहरण के लिए 'inet_ntoa' कॉल करने की आवश्यकता है तो मैं इसे कैसे लॉक कर सकता हूं? –

2

फ़ंक्शन inet_aton में फ़ंक्शन कॉल के बीच कोई भी स्थिति नहीं है, इसलिए मुझे कोई कारण नहीं दिख रहा है कि यह थ्रेड सुरक्षित क्यों नहीं होगा (बशर्ते आपके द्वारा पारित तर्कों को थ्रेड के बीच साझा नहीं किया जाता है)।

+1

वैश्विक स्थैतिक चर या वैश्विक बाहरी स्थिति (जैसे हार्डवेयर घड़ी) का उपयोग, यहां तक ​​कि बिना किसी स्थिति के, मुझे विश्वास है कि एक संभावित मुद्दा है। – mctylr

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