2012-08-23 18 views
11

क्या समवर्ती परिवर्तनीय प्राथमिकता कतार है? आदर्श रूप में, मैं एक सी ++ कार्यान्वयन की तलाश में हूं, लेकिन, शुरुआत करने वालों के लिए, एल्गोरिदम के लिए एक सूचक बहुत उपयोगी होगा।समवर्ती परिवर्तनीय प्राथमिकता कतार

स्पष्ट होने के लिए, मैं प्राथमिकता कतार की तलाश में हूं जहां मैं तत्वों की प्राथमिकताओं को समायोजित कर सकता हूं। विशेष रूप से, टीबीबी का concurrent_priority_queue आवश्यक कार्यक्षमता प्रदान नहीं करता है। (उस मामले के लिए, न तो एसटीएल का priority_queue करता है, भले ही हम समेकन को अनदेखा करते हैं।) Boost.Heap लाइब्रेरी धारावाहिक कार्यक्षमता प्रदान करता है जो मैं चाहता हूं, लेकिन बिना किसी सहमति के। स्वाभाविक रूप से, मैं हर ऑपरेशन पर पूरी कतार को लॉक करने की तुलना में कुछ बेहतर अनाज की तलाश में हूं।

+0

मुझे संदेह है कि ऐसी किसी भी कतार को या तो मोटे लॉक या वास्तव में बहुत से दाग वाले ताले की आवश्यकता होगी और न ही बहुत कुशल होगा। लेकिन आपकी समस्या के लिए एक और दृष्टिकोण हो सकता है। आपका उपयोग-मामला क्या है? –

+0

हाँ .. मैं इस तरह की चीज को विश्वसनीय रूप से करने का कोई भी तरीका नहीं देख सकता। क्या एक futex/criticalSection लॉक इतना बड़ा सौदा है? पेड़ में एक स्थान से पॉइंटर को हटाने और इसे कहीं और डालने में इतना लंबा समय नहीं लग सकता है, (या एक संग्रह से दूसरे संग्रह में एक पॉइंटर ले जाएं, या जो भी आपकी प्राथमिकता-सूची कार्यान्वयन में करने की ज़रूरत है)? –

+0

ठीक है, मैं वास्तव में एक लॉक मुक्त डेटा संरचना की उम्मीद कर रहा था। अद्यतनों के लिए, सामान्य डेटा संरचनाओं के साथ वे बहुत व्यस्त होते हैं: आप न केवल एक स्थान से दूसरे स्थान पर एक पॉइंटर ले जा रहे हैं, लेकिन आपको एक पेड़ को पुनर्व्यवस्थित करना होगा, या एक समान ऑपरेशन करना होगा। – foxcub

उत्तर

9

एक समवर्ती प्राथमिकता कतार अक्सर स्कीप्लिस्ट का उपयोग करके लागू की जाती है, इसलिए फेसबुक की ConcurrentSkipList आपकी आवश्यकताओं के अनुरूप हो सकती है।

+0

उत्कृष्ट सुझाव। सूचक के लिए बहुत बहुत धन्यवाद। मैं केवल यही चाहता हूं कि उनके पास इस कक्षा के लिए एक दस्तावेज पृष्ठ था। – foxcub

संबंधित मुद्दे