ओपनएमपी 3.1 मानक सिग्नल के बारे में कुछ भी नहीं कहता है।
जैसा कि मुझे पता है, लिनक्स/यूनिक्स पर हर लोकप्रिय ओपनएमपी कार्यान्वयन pthreads पर आधारित है, इसलिए ओपनएमपी थ्रेड पाथ्रेड का धागा है। और pthreads और सिग्नल के सामान्य नियम लागू होते हैं।
करता OpenMP इस तरह के नियंत्रण
नहीं किसी भी विशिष्ट नियंत्रण प्रदान करते हैं; लेकिन आप pthread के नियंत्रण का उपयोग करने की कोशिश कर सकते हैं। केवल समस्या यह जानना है कि ओपनएमपी थ्रेड का कितना उपयोग किया जाता है और कहां नियंत्रित कथन कहां रखा जाता है।
सिग्नल ओपनएमपी बनाता है किसी भी धागे को सिग्नल वितरित किया जा सकता है?
डिफ़ॉल्ट रूप से, हाँ, यह किसी भी धागे पर पहुंचा दिया जाएगा।
मेरी हैंडलर कहा जाता है,
संकेत हैंडलर के बारे में सामान्य नियम अब भी लागू होता है। सिग्नल हैंडलर में स्वीकृत कार्य http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html (पृष्ठ के अंत में)
और printf
की अनुमति नहीं है (write
है)। यदि आप जानते हैं कि सिग्नल प्रिंटफ के पल में किसी थ्रेड द्वारा उपयोग नहीं किया जाता है (उदाहरण के लिए आपके समांतर क्षेत्र में कोई printf नहीं है) तो आप printf का उपयोग कर सकते हैं।
यह अभी भी सुरक्षित रूप से आवेदन को मार सकता है (निकास (0);)
हाँ, यह कर सकते हैं: abort()
और _exit()
हैंडलर से अनुमति दी जाती है।
लिनक्स/यूनिक्स सभी धागे को समाप्त कर देगा जब कोई थ्रेड exit
या abort
करता है।
और ओपनएमपी ताले लॉक करने जैसी चीजें करते हैं?
आपको नहीं करना चाहिए, लेकिन अगर आपको पता है कि यह लॉक सिग्नल हैंडलर रन के समय लॉक नहीं होगा, तो आप इसे करने का प्रयास कर सकते हैं।
!! अद्यतन
ओपनएमपी http://www.cs.colostate.edu/~cs675/OpenMPvsThreads.pdf ("सी/सी ++ में थ्रेडिंग बनाम ओपनएमपी) के लिए सिग्नलिंग को अपनाने का एक उदाहरण है। संक्षेप में: हैंडलर में ध्वज सेट करें और प्रत्येक थ्रेड में प्रत्येक थ्रेड लूप पुनरावृत्ति पर इस ध्वज के चेक जोड़ें।
एक समानांतर क्षेत्र के लिए
कुछ ऐसा जो के साथ और अधिक C/C++ अनुप्रयोगों कि फोरट्रान अनुप्रयोगों के साथ कि कार्यक्रम एक परिष्कृत यूजर इंटरफेस का उपयोग करता है तब होता है एक संकेत आधारित अपवाद तंत्र अनुकूल। Genehunter एक साधारण उदाहरण है जहां उपयोगकर्ता नियंत्रण-सी दबाकर एक परिवार के पेड़ की गणना को बाधित कर सकता है ताकि यह रोग के बारे में नैदानिक डेटाबेस में अगले परिवार के पेड़ पर जा सके। समयपूर्व समाप्ति को में धारावाहिक संस्करण को एक सी ++ द्वारा अपवाद सिग्नल हैंडलर, सेटजंप, और लांगजंप से युक्त तंत्र से संक्रमित संस्करण में संभाला जाता है। ओपनएमपी समानांतर निर्माण सीमा पार करने के लिए अनियंत्रित नियंत्रण प्रवाह की अनुमति नहीं देता है। हम ने मतदान तंत्र में इंटरप्ट हैंडलर को बदलकर ओपनएमपी संस्करण में अपवाद हैंडलिंग को संशोधित किया। नियंत्रण-सी सिग्नल को पकड़ने वाला थ्रेड एक साझा ध्वज सेट करता है। सभी धागे द्वारा लूप की शुरुआत में फ्लैग की जांच करें, routine has_hit_interrupt() पर कॉल करें और सेट होने पर पुनरावृत्ति को छोड़ दें। पाश समाप्त हो जाती है, गुरु ध्वज की जाँच करता है और आसानी से असाधारण बाहर निकलने के पूरा करने के लिए longjump निष्पादित कर सकते हैं जब
हो सकता है, यह एक खंड जो बाहर निकलने पकड़ता का उपयोग करके हल किया जा सकता (चित्र 1 देखें) ? – Bort
ओपनएमपी विनिर्देश में "सिग्नल" शब्द नहीं है। – jfs