2009-01-16 17 views
33

यदि आप एक बहु-थ्रेडेड एप्लिकेशन लिख रहे हैं जो सिस्टम/लाइब्रेरी कॉल का उपयोग करता है जो त्रुटि प्रकार को इंगित करने के लिए इरनो का उपयोग करता है, तो क्या इरनो का उपयोग करने का एक सुरक्षित तरीका है? यदि नहीं, तो क्या त्रुटि के प्रकार को इंगित करने का कोई अन्य तरीका है कि एक त्रुटि हुई है?क्या बहु-थ्रेडेड एप्लिकेशन में सुरक्षित रूप से त्रुटि का उपयोग करने का कोई तरीका है?

उत्तर

34

यदि आपकी मानक लाइब्रेरी मल्टीथ्रेड जागरूक है, तो संभवतः #define है जो errno को फ़ंक्शन कॉल में बदलता है जो थ्रेड-स्थानीय त्रुटि रिटर्न मान देता है। हालांकि, इसका उपयोग करने के लिए आप आमतौर पर में extern घोषणा पर निर्भर होने के बजाय <errno.h> शामिल करना चाहिए।

मुझे एक लेख Thread-safety and POSIX.1 मिला जो इस प्रश्न को संबोधित करता है।

+0

धन्यवाद! /usr/include/bits/errno.h में एक त्वरित जांच ने पुष्टि की है कि मेरी उबुंडू मशीन पर धागे का उपयोग करते समय त्रुटि वास्तव में प्रति-थ्रेड होने के लिए परिभाषित की जाती है। –

16

man errno का कहना है:

errno के प्रकार पूर्णांक एक परिवर्तनीय lvalue होने के लिए आईएसओ सी मानक द्वारा परिभाषित किया गया है, और स्पष्ट रूप से घोषित नहीं होना चाहिए; errno एक मैक्रो हो सकता है। errno धागा-स्थानीय है; इसे थ्रेड में सेट करने से किसी अन्य थ्रेड में इसके मान को प्रभावित नहीं करता है।

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

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