मुझे पता होना चाहिए कि सी में संकेतों को संभालने के दौरान दौड़ की स्थिति से कैसे बचें। प्रत्येक बार जब मेरा प्रोग्राम सिग्नल प्राप्त करता है, तो मैं इसे एक (वैश्विक) लिंक सूची में बदलना चाहता हूं। यह बेहद जरूरी है कि मुझे सिग्नल याद न हो, और उतना ही महत्वपूर्ण है कि हैंडलर निष्पादित होने पर वैश्विक लिंक की गई सूची को मैं संशोधित नहीं कर रहा हूं।सी सिग्नल हैंडलर पहेली में रेस हालत
समस्या है, अगर मुझे संकेत मिलता है, और हैंडलर शुरू होता है, लेकिन फिर एक और सिग्नल द्वारा बाधित किया जाता है। यह (जैसा कि मैं इसे समझता हूं) सिग्नल हैंडलर का एक नया निष्पादन ट्रिगर करता है, जो एक ही वैश्विक डेटासेट पर काम करेगा - अनुमत नहीं है!
मैं लॉक का उपयोग नहीं कर सकता, क्योंकि अगर पहला हैंडलर कॉल बाधित हो जाता है, तो यह स्वाभाविक रूप से हस्तक्षेप करने वाले हैंडलर को लेने के लिए ताला मुक्त नहीं करेगा। तो मैं इसे कैसे करूं? कोई उपाय?
ऐसा लगता है कि लॉक वास्तव में आपको जो चाहिए वह है, यह पहली कॉल समाप्त होने तक दूसरी कॉल को रोक देगा। क्या वह वही नहीं है जो आप चाहते हैं? – Doggett
यह इस मामले में डेडलॉक होगा, क्योंकि नया बाधा अवरुद्ध होगा, और कभी भी निष्पादन धागे पर नियंत्रण वापस नहीं करेगा। यही है, पहला * कभी खत्म नहीं होगा। – Nate
ध्यान रखें कि संकेत किसी भी तरह "मिस्ड" होंगे। यदि उदा। आपकी प्रक्रिया को समय में एक साथ बंद करने के लिए 2 सिग्नल मिलते हैं, वे ओएस द्वारा एक सिग्नल में विलय हो जाते हैं। – nos