c++ - Boost Shared Memory - Returning Vector of Pointers -
मैं एक बढ़ावा :: interprocess :: mapped_region का उपयोग कर रहा हूँ structs जो मैं विभिन्न प्रक्रियाओं के बीच साझा करता हूं यह ठीक काम करता है, मैं एक आईडी ऑफसेट द्वारा इन स्ट्रैक्ट्स का उपयोग करता हूं।
उदाहरण
कंटेनर_स्ट्रक्ट * कंटेनर = (कंटेनर_स्ट्रक्ट *) mapped_region.get_address ()पूर्व>जहां
कंटेनर_स्ट्रक्टमें एक अन्य स्ट्रेट की सरणी होती है जिसे मैं ऑफसेट द्वारा एक्सेस कर सकता हूं।उदाहरण
MyData * data = container - & gt; dataArray [0];मुझे पता है कि यह शेयरिंग डेटा को संभालने का सबसे खूबसूरत तरीका नहीं है, लेकिन मैं सिर्फ एक शुरुआत कर रहा हूँ जो बढ़ावा देने वाले इंटरप्रोसेज के साथ और मानचित्रों का उपयोग करता है। यह मेरे लिए बिल्कुल स्पष्ट नहीं है।
अब मैं जो करना चाहता हूं वो कई प्रक्रियाओं के लिए कई मायडाटा संरचनाओं के लिए एक सूची / संकेतक के संकेतक वापस कर देता है।
मैं स्पष्ट रूप से एक
std :: vector & lt; MyData का उपयोग नहीं कर सकता * & Gt;कंटेनर क्योंकि एक वेक्टर प्रक्रियाओं के बीच अस्थायी और अमान्य है।मैं
MyData struct को एक अस्थायी वेक्टर बनाने के लिए कैसे जाऊँगा? मैं इसे में वैक्टर को पकड़ने के लिए बस एक और क्षेत्र नहीं बना सकता क्योंकि अगर एकाधिक प्रक्रियाएं संकेतक के एक सदिश का अनुरोध करती हैं तो यह थ्रेड सुरक्षित नहीं होगा - मैं भी ताला लगा के साथ कोई ओवरहेड नहीं चाहता, क्योंकि वर्तमान में साझा डेटा केवल पढ़ा है और कभी नहीं किसी भी प्रक्रिया से लिखा गया है - इस प्रकार कोई सिंक / लॉक की आवश्यकता नहीं है।चलिए कहते हैं कि मैं अपनी साझा लिब में फ़ंक्शन जोड़ना चाहता हूं जो मुझे
MyData *पॉइंटर्स सूचकांकints के आधार पर, जहां सूचकांक कंटेनर_स्ट्रक्ट में ऑफसेट होता है - मैं यह कैसे करूँ?
आप मेमोरी सेगमेंट में पॉइंटर्स को ऐसे तरीके से साझा करने के लिए एक वेक्टर boost :: interprocess :: offset_ptr का उपयोग कर सकते हैं कि संकेतक प्रक्रियाओं में उपयोगी होते हैं, उदा। :
टेम्पलेट & lt; typename T & gt; Ptr = boost :: interprocess :: offset_ptr का उपयोग करके & lt; T & gt;; टेम्पलेट & lt; typename T & gt; SharedVector = std :: vector & lt; का उपयोग कर पीटीआर & lt; T & gt;, बढ़ावा :: इंटरप्रोसेज :: आबंटक & lt; Ptr & lt; T & gt ;, बढ़ावा :: अंतःक्रिया :: साझा_मामोरी_सेगमेंट :: सेगमेंट_मनगर & gt ;; बेशक, वास्तविक टी के लिए भी की आवश्यकता भी काम करने के लिए offset_ptr के लिए समान मेमोरी सेगमेंट में इंगित किया गया है।
यह अब तक दिखता है, कि आप वास्तव में
-
boost :: multi_index_container (जो कि मुख्य (एकाधिक) इंडेक्स एक कंटेनर में उपयोग करने में बेहतर हो सकते हैं ) और बूस्ट इंटरप्रोसेज आवर्तकों को समझता है बस ठीक
-
घुसपैठ कंटेनर को बढ़ावा देने (जो "कहीं" "लाइव" वस्तुओं का एक संग्रह बना सकता है)। अंतर्निहित घुसपैठ हुक समझ में आता है कि
boost :: interprocess :: offset_ptrका उपयोग कैसे करें
Comments
Post a Comment