मल्टी-कोर प्रोसेसर के लिए लिनक्स में लॉक-फ्री आईपीसी


9

मैं मल्टी-कोर प्रोसेसर के साथ सी में, लिनक्स पर लॉक-फ्री आईपीसी के साथ एप्लिकेशन लिखने का एक तरीका खोजने की कोशिश कर रहा हूं।

मान लें कि मेरे पास प्रक्रिया 1 है और प्रक्रिया 2 है जो एक फीफो या साझा की गई मेमोरी पर लिखती है। फिर प्रोसेस 3 और प्रोसेस 4 उस साझा मेमोरी या फीफो से पढ़ेंगे।

क्या यह लॉक-फ्री एल्गोरिदम के साथ संभव है?

आपके मार्गदर्शन को बहुत सराहा गया है।


क्या आप लॉक-फ्री संचार के संबंध में कुछ संकेत या कुछ बाहरी दस्तावेज का संदर्भ दे सकते हैं? इस शब्द के साथ वास्तव में क्या मतलब है?
जियोर्जियो

हां निश्चित रूप से, drdobbs.com/cpp/lock-free-interprocess-communication/… और यह एक en.wikipedia.org/wiki/Non-blocking_al
पाली

अगर मैं सही तरीके से समझूं तो समस्या समवर्ती (1, 2) लिखती है और समवर्ती (3, 4) पढ़ती है। लेखकों और पाठकों के बीच समन्वय पहले से ही जुड़े पृष्ठ पर वर्णित एल्गोरिदम द्वारा कवर किया गया है।
जियोर्जियो

जवाबों:


2

मैंने रिंग बफ़र्स का उपयोग करने के लिए संदर्भ देखा है, और ताले की आवश्यकता को समाप्त करने या कम करने के लिए स्थान बिंदुओं तक पहुंच को नियंत्रित किया है। यह हालांकि इंतजार की आवश्यकता को समाप्त नहीं करता है, और केवल काम करना चाहिए फिर एक रिंग बफर में एक लेखक और एक पाठक होता है। आपके मामले में आपको कम से कम दो बफ़र्स की आवश्यकता होगी।

जैसा कि मैंने समझा है कि तंत्र है:

  • लेखक तब तक प्रतीक्षा करता है जब तक कि एक खुला स्लॉट नहीं है (अंतिम + 1! = वर्तमान)
  • लेखक रिंग बफर में प्रविष्टि लिखते हैं।
  • लेखक अंतिम प्रविष्टि सूचक को अद्यतन करता है।

  • पाठक तब तक प्रतीक्षा करता है जब तक कि रिंग बफर में एक उपलब्ध प्रविष्टि नहीं होती है (अंतिम! = वर्तमान)।

  • पाठक प्रवेश की प्रक्रिया करता है।
  • पाठक वर्तमान सूचक को बढ़ाता है।

उपयोग किए गए प्रतीक्षा समय के आधार पर यह या तो एक खाली कतार में नई वस्तुओं के लिए विलंबता जोड़ सकता है, या प्रतीक्षा लूप में बहुत सारे सीपीयू चक्रों को जला सकता है। काम करने के लिए पॉइंटर को अपडेट करने और राइट एक्सेस के सख्त अलगाव का क्रम महत्वपूर्ण है। लेखक को केवल पाठक को उपलब्ध कराने के लिए सूचक को बढ़ाने से पहले रिंग बफर प्रविष्टि लिखने की अनुमति है।


और मैं, दिलचस्प लग रहा है अच्छी तरह से विकिपीडिया पर के रूप में यह एक मिल गया है, हालांकि यह प्रयास नहीं किया है concurrencykit.org
पाली

1

हाँ, यह मुमकिन है। हम अपनी परियोजना में लॉक-फ्री कतार के एल्गोरिदम में से एक का उपयोग करते हैं। लेकिन ये एल्गोरिदम वास्तव में स्पष्ट नहीं हैं। यदि आप उन्हें गहराई से समझना चाहते हैं तो आपको इसके लिए कुछ महीने बिताने के लिए तैयार रहना चाहिए।


0

इंटर प्रोसेस कम्युनिकेशन लॉक-फ़्री नहीं हो सकता है। केवल अंतर-सूत्र। जहाँ तक मैं जानता हूँ।


मुझे लगता है कि "लॉक फ्री" तंत्र का एक गुण है, उपयोगकर्ता का नहीं। जब आप मिश्रण में साझा मेमोरी जैसी चीजें जोड़ते हैं तो थ्रेड्स और प्रोसेस के बीच का अंतर काफी पतला हो जाता है।
tylerl
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.