मैं इस WebSocket में std::queue
के लिए boost::lockfree::queue
स्थानापन्न कोशिश कर रहा हूँ ++ उदाहरण https://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcast_server/broadcast_server.cppबढ़ावा है :: lockfree :: queue C++ 11 के साथ लॉकफ्री नहीं है?
ऐसा लगता है कि यह वास्तव में अभी तक boost::unique_lock
लाइनों को हटाने के किसी भी वाक्य रचना को बदले बिना किया जा सकता है।
हालांकि, जब मैं बढ़ावा उदाहरण देखते हैं, यह एक कोड अनुभाग कि lockfree http://boost-sandbox.sourceforge.net/doc/html/lockfree/examples.html
लिए जाँच करता है जब मैं lockfree::queue
पर डॉक्स के माध्यम से देखने के लिए है, यह is_lock_free()
http://boost-sandbox.sourceforge.net/doc/html/boost/lockfree/queue.html पर इस का कहना है:
बूल is_lock_free (शून्य) कॉन्स;
चेतावनी
यह केवल चेक, अगर कतार सिर और पूंछ नोड्स और freelist एक ताला मुक्त ढंग से संशोधित किया जा सकता। अधिकांश प्लेटफ़ॉर्म पर, संपूर्ण कार्यान्वयन लॉक-फ्री है, यदि यह सत्य है। सी ++ 0x-style परमाणुओं का उपयोग करके, पूरी तरह सटीक कार्यान्वयन प्रदान करने की कोई संभावना नहीं है, क्योंकि प्रत्येक को प्रत्येक आंतरिक नोड, का परीक्षण करने की आवश्यकता होगी, जो ऑपरेटिंग सिस्टम से आगे नोड आवंटित किए जाने पर असंभव है।
देता है: सत्य, यदि कार्यान्वयन लॉक-फ्री है।
मुझे पता नहीं है क्या "C++ 0x शैली एटोमिक्स" हैं, लेकिन मैं बहुत यकीन है कि C++ 0x मतलब C++ 11।
मैं C++ 11 का उपयोग कर रहा है और सिर्फ std::queue
के लिए boost::lockfree::queue
प्रतिस्थापन, तो यह lockfree लागू नहीं किया जाएगा?
मैं आपको लॉक-फ्री एल्गोरिदम को करने से पहले मापने का आग्रह करता हूं - वे साफ हैं लेकिन _scalable_ और _safe_ (यानी प्राथमिकता उलटा रोकें) - प्रदर्शन कम चिंता का विषय है और आमतौर पर खराब है। उदाहरण के लिए, बूस्ट का लॉक-फ्री कतार कार्यान्वयन लॉक 'std :: queue' से धीमा हो जाएगा जब तक कि आपके पास कई कोर और बहुत अधिक मात्रा में विवाद न हो। –
'मुझे नहीं पता कि "सी ++ 0x-style परमाणु" क्या हैं [बूस्ट :: परमाणु] (http://www.boost.org/doc/libs/1_53_0_beta1/doc/html/atomic। एचटीएमएल) जो लाइब्रेरी पर निर्भर करता है। –
lib उदाहरण के लिए +1 – ExoticBirdsMerchant