मैंने सोचा कि मैं एक होस्ट के भीतर संचार के लिए सॉकेट के स्थान पर Boost.Interprocess's Message Queue का उपयोग करूंगा। लेकिन इसमें खोदने के बाद, ऐसा लगता है कि इस पुस्तकालय को किसी कारण से POSIX संदेश कतार सुविधा (जो मेरा लिनक्स सिस्टम समर्थन करता है) को छोड़ देता है, और इसके बजाय POSIX साझा स्मृति के शीर्ष पर लागू किया जाता है। इंटरफ़ेस इतना समान है कि आप इसे तुरंत अनुमान नहीं लगा सकते हैं, लेकिन ऐसा लगता है।बूस्ट संदेश कतार POSIX संदेश कतार पर आधारित नहीं है? चुनने के लिए असंभव (2)?
मेरे लिए नकारात्मक पक्ष यह है कि shm_open(3)
के माध्यम से प्राप्त साझा स्मृति select(2)
साथ प्रयोग करने योग्य होने के लिए के रूप में mq_open(3)
के माध्यम से प्राप्त POSIX संदेश कतार के लिए विरोध प्रकट नहीं होता है, है।
ऐसा लगता है कि बूस्ट की लाइब्रेरी इस मामले में हार जाती है। क्या कोई समझता है कि यह क्यों होना चाहिए? यहां तक कि यदि यह POSIX संदेश कतार केवल कुछ सिस्टम पर उपलब्ध है, तो भी मैं बूस्ट को उस सुविधा का उपयोग करने की अपेक्षा करता हूं जहां यह उपलब्ध है, और केवल जहां आवश्यक हो उसे फिर से कार्यान्वित करें। क्या पॉज़िक्स सिस्टम का कुछ गड़बड़ है जिसे मैं अभी तक पहचान नहीं पाया?
ध्यान दें कि लिनक्स पर, कस्टम स्पिनलॉक का उपयोग करने के बजाय यह pshared mutexes और condition variables का उपयोग करता है, जो लगभग उसी प्रक्रिया के भीतर म्यूटेक्स के रूप में कुशल होना चाहिए। हालांकि, 'बूस्ट :: इंटरप्रोसेस' ऑब्जेक्ट्स पर चयन करने के लिए, आपको किसी डेटा को प्रश्न में ऑब्जेक्ट मॉनिटर करने की आवश्यकता होगी और कुछ डेटा प्रतीक्षा होने पर एक फीफो या ईवेंटफड को टक्कर मारनी होगी। – bdonlan
फिर भी, क्यों कोई बढ़ावा नहीं है :: इंटरप्रोसेस उपलब्ध होने पर पॉज़िक्स म्यूक्यू का उपयोग नहीं करता है ... मैंने खुद को एक एमक्यू रोक दिया है कि Win32 पर निर्माण करते समय, मेरा अमूर्तता boost :: interprocess :: mqueue का उपयोग करता है और लिनक्स पर निर्माण करते समय, मेरा abstraction posix mqueue का उपयोग करता है। यह आसान था, यही कारण है कि मुझे कोई कारण नहीं मिल रहा है कि बूस्ट :: इंटरप्रोसेस ऐसा क्यों नहीं करता है। अपरिपक्वता? मैंने कुछ देखा है? –