मैं जानना चाहता हूं कि सिग्नल हैंडलर से साझा डेटा तक पहुंचना एक अच्छा विचार है या नहीं। मेरा मतलब है कि एक प्रक्रिया के साथ बहु प्रक्रिया प्रणाली और बहुप्रचारित प्रणाली के परिदृश्य पर विचार करें। बहु प्रक्रिया प्रणाली में, मान लें कि मेरे पास प्रक्रियाएं एक विशेष सिग्नल को संभालती हैं और प्रक्रियाओं द्वारा कुछ साझा चर या स्मृति को अद्यतन करती हैं। क्या मैं सिग्नल हैंडलर से ही ऐसा कर सकता हूं।सिग्नल हैंडलर से साझा डेटा तक पहुंच
हालांकि, pthreads का उपयोग कर धागे के मामले में, मुझे नहीं लगता कि यह संभव है है। http://maxim.int.ru/bookshelf/PthreadsProgram/htm/r_40.html। जैसा कि इस आलेख में दिया गया है, उन्होंने उल्लेख किया है कि यह असीमित सिग्नल सुरक्षित नहीं है और इसके लिए सिग्वाइट का उपयोग करने का सुझाव दिया है। मैं नहीं हूं कि यह असीमित सिग्नल सुरक्षित क्यों नहीं है। मेरा मतलब है कि कहें, मैं थ्रेड द्वारा सिग्नल को संभालता हूं और सिग्नल हैंडलर रूटिंग में है। मैं इसे अद्यतन करने के लिए साझा स्मृति पर एक ताला हासिल करता हूं। इस बीच एक ही प्रकार का एक और सिग्नल आता है और इसे संभालने के लिए ज़िम्मेदार एक और थ्रेड सिग्नल हैंडलर को फिर से निष्पादित करता है। यहां सिग्नल हैंडलर प्रक्रिया के लिए समान है लेकिन इसे कई बार कहा जाता है। दूसरी बार, यह लॉक और अपडेट/डेटा को ओवरराइड नहीं देख सकता है। क्या साझा डेटा का उपयोग करके मल्टीथ्रेड सिग्नल हैंडलर के साथ यह समस्या है।
मैं थोड़ा उलझन में, बहु प्रक्रिया प्रणालियों में हूँ, मैं प्रत्येक प्रक्रिया के लिए संकेत हैंडलर की एक प्रति है। लेकिन बहुप्रचारित प्रणाली में, एकाधिक धागे द्वारा उपयोग किए जाने वाले सिग्नल हैंडलर की एक प्रति है, यह नहीं है। तो जब एक ही प्रकार के कई सिग्नल आते हैं और हमारे पास दो धागे होते हैं जो इसे संभालने के लिए ज़िम्मेदार होते हैं, तो वे दोनों हैंडलर कोड के उसी टुकड़े को निष्पादित करने का प्रयास करेंगे? यह सब कैसे फिट बैठता है?
आप 'pthread_mutex_lock के मानक मामला कैसे कल्पना कर सकते हैं()' काम एक से अधिक थ्रेड द्वारा एक ही समय में बुलाया जा रहा है? :) (उपयोग के इस मामले को देखते हुए यही कारण है कि हम mutexes है, कि है, ख़ाली यहाँ स्पष्टीकरण के लिए भीख माँगता, लगता है) – mlvljr
@mlvljr: यह अलग है - संकेतों के साथ, यह * एक ही * धागा पर बुला 'pthread_mutex_lock' दो बार हो सकता है एक ही समय (अच्छी तरह से एक ही समय में नहीं, लेकिन सिग्नल हैंडलर में एक और शुरू होने पर एक कॉल आंशिक रूप से चलाया जाता है)। –
इसके अलावा, अगर थ्रेड * पहले से ही * म्यूटेक्स का मालिक होता है जब एक सिग्नल प्राप्त होता है जिससे यह म्यूटेक्स (रिकर्सिव म्यूटेक्स को छोड़कर) प्राप्त करने का प्रयास करता है। –