पॉज़िक्स धागे का उपयोग करते समय, कार्य धागे के कारण मुख्य थ्रेड को त्रुटियों (जैसे डीरेंसेंस नल पॉइंटर्स, शून्य द्वारा विभाजित) से "सुरक्षित" करने का कोई तरीका है। "वर्कर थ्रेड" से मेरा मतलब है कि pthread_create() द्वारा निर्मित पॉज़िक्स थ्रेड।वर्कर थ्रेड में त्रुटियों से मुख्य धागे की सुरक्षा
दुर्भाग्य से, हम अपवाद उपयोग नहीं कर सकते हैं - तो नहीं "पकड़", आदि
यहाँ मेरी परीक्षण कार्यक्रम (C++) है:
void* workerThreadFunc(void* threadId) {
int* a = NULL;
*a = 5; //Error (segmentation fault)
pthread_exit(NULL);
}
int main() {
cout << "Main thread start" << endl;
pthread_t workerThread;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
pthread_create(&workerThread, &attr, workerThreadFunc, (void*)0);
pthread_join(workerThread, NULL);
cout << "Main thread end" << endl;
}
उपरोक्त उदाहरण में, workerThread की वजह से त्रुटि होगा पूरे कार्यक्रम को समाप्त करें। लेकिन मैं इस त्रुटि के बावजूद मुख्य धागा चलाना जारी रखना चाहता हूं। क्या यह हासिल करना संभव है?
दुर्भाग्यवश, हम अपवादों का उपयोग नहीं कर सकते - इसलिए कोई "पकड़" आदि नहीं। - जरूर आप कर सकते हो। अपवाद को उस धागे में फेंक दिया जाएगा जो इसे उठाएगा। –
अपवादों/त्रुटियों से अन्य धागे को 'सुरक्षित' करने का सबसे अच्छा तरीका यह है कि उन्हें ठीक किया जाए ताकि वे ऐसा न हों या पता चला हो और प्रबंधित/लॉग/जो भी हो। –
नोट - ऊपर दिए गए आपके उदाहरण में, आप ऐसे थ्रेड में शामिल होने का प्रयास कर रहे हैं जो अभी तक नहीं बनाया गया है। –