लॉक-फ़्री, निरंतर अपडेट-टाइम समवर्ती ट्री डेटा-स्ट्रक्चर्स?


20

मैं हाल ही में थोड़ा सा साहित्य पढ़ रहा हूं, और कुछ दिलचस्प डेटा संरचनाओं को पाया है।

मैंने सबसे खराब स्थिति के अद्यतन समय [1-7] के लिए अद्यतन समय प्राप्त करने के विभिन्न विभिन्न तरीकों पर शोध किया है ।O(1)

हाल ही में मैंने कुशल समवर्ती पहुंच का समर्थन करने के लिए लॉक-फ्री डेटा-संरचनाओं को देखना शुरू किया।

क्या इन सबसे खराब स्थिति वाले अपडेट-टाइम तकनीकों का उपयोग लॉक-फ्री डेटा संरचनाओं के कार्यान्वयन में किया गया है?O(1)

मैं पूछता हूं क्योंकि; मेरे लिए, वे इस "सैद्धांतिक वृद्धि" के स्पष्ट व्यावहारिक विस्तार की तरह लगते हैं।


  1. टारजन, रॉबर्ट एंड्रे। "हे (1) रोटेशन में संतुलित खोज ट्री को अद्यतन करना।" सूचना प्रसंस्करण पत्र 16, सं। 5 (1983): 253 - 257।

  2. Driscoll, JR, N Sarnak, DD Sleator, और RE Tarjan। "डेटा संरचनाओं को लगातार बनाना।" कम्प्यूटिंग के सिद्धांत पर अठारहवें वार्षिक एसीएम संगोष्ठी की कार्यवाही में 109-121। STOC '86। न्यूयॉर्क, एनवाई, यूएसए: एसीएम, 1986।

  3. Levcopoulos, C. और Mark H. Overmars। "हे (1) सबसे खराब मामला अद्यतन समय के साथ एक संतुलित खोज ट्री।" एक्टा इन्फ। २६, सं। 3 (नवंबर 1988): 269–277।

  4. फ्लीचर, रुडोल्फ। O (1) वर्स्ट-केस अपडेट टाइम के साथ एक सिंपल बैलेंस्ड सर्च ट्री

  5. डाइट्ज़, पॉल एफ, और राजीव रमन। "एक निरंतर अपडेट टाइम फिंगर सर्च ट्री।" सूचना प्रसंस्करण पत्र 52, नं। 3 (1994): 147 - 154

  6. लागोगनिनिस, जॉर्ज, क्रिस्टोस माक्रिस, यानिस पनागिस, स्पाइपरोस सीयूटस और कोस्टस त्साल्लास। "नई डायनेमिक बैलेंस्ड सर्च ट्रीट्स विथ वर्स्ट-केस कॉन्सटेंट अपडेट टाइम।" जे। ऑटोमैटिक लैंग। कंघी। 8, नहीं। 4 (जुलाई 2003): 607–632।

  7. ब्रोडल, गेरथ स्टाल्टिंग, जॉर्ज लैगोगनिनिस, क्रिस्टोस माक्रिस, अथानासियोस साकालीडेलिस और कोस्तास साइक्लस। "ऑप्टिमल फिंगर सर्च पॉइंटर मशीन में पेड़।" Syst। विज्ञान। 67, सं। 2 (सितंबर 2003): 381–418।


2
कृपया उन लोगों के लिए शिष्टाचार के रूप में कागजात के लिंक को जोड़ने पर विचार करें जो आपके मुद्दे की जांच करना चाहते हैं।
राफेल

3
ठीक है, संबंधित लेख के लिंक में जोड़ा गया।
एटी

1
मेरा सुझाव है कि अगर आपको जल्द ही कोई उपयोगी प्रतिक्रिया नहीं मिलती है तो cstheory.SE (यहाँ एक लिंक के साथ) में रिपॉस्टिंग करूँ।
जेफ

1
सलाह के लिये धन्यवाद। मैंने रीपोस्ट किया है: लॉक-फ़्री, निरंतर अपडेट-टाइम समवर्ती ट्री डेटा-स्ट्रक्चर्स?
एटी

मैंने इससे पहले प्रैक्टिकल लॉक-फ्री डेटा स्ट्रक्चर्स लाइब्रेरी का इस्तेमाल किया था । उन्हें लॉक-फ्री ट्री डेटा संरचनाओं का कुछ समर्थन है। हो सकता है कि आपके पास जो कुछ भी हो, वह आपके लिए हो।
रेजा

जवाबों:


4

अपने आप में मदद नहीं करता है। लॉक-फ्री डेटा संरचना में आपके डेटा संरचना को बदलने के लिए एकल परमाणु उदाहरण होने की आवश्यकता होती है। परमाणुनिरूपण केतुरंत पहले और तुरंत बाद दोनोंप्रतिनिधित्वकरनेवाले आक्रमणकारियोंको लागू होने की आवश्यकता है।O(1)

इसका मतलब है कि यदि आप डेटा संरचना में संशोधन कर रहे हैं तो महत्वपूर्ण विशेषता यह है कि आप निजी डेटा संरचना पर सभी मॉड्स कर सकते हैं और फिर एकल परमाणु निर्देश में संशोधनों में स्वैप कर सकते हैं।

लॉक-फ्रीडम आमतौर पर सबसे आसान होता है जब आपके डेटा स्ट्रक्चर होते हैं अपरिवर्तनीय ( विशुद्ध रूप से कार्यात्मक ) होती हैं। आप केवल डेटा संरचना के वर्तमान संस्करण के लिए एक वैश्विक सूचक रखते हैं। पाठकों को कुछ भी लॉक करने की आवश्यकता नहीं है। डेटा-संरचना में संशोधन वैश्विक सूचक को एक अपरिवर्तनीय डेटा संरचना को दूसरे में स्वैप करने से प्रभावित होता है।

उदाहरण के लिए: यदि आपके पास विशुद्ध रूप से कार्यात्मक पेड़ संतुलित वृक्ष है:

  1. वर्तमान वैश्विक पॉइंटर को पेड़ की जड़ में रिकॉर्ड करें।
  2. एक नया पेड़ बनाएं जो एक नोड को सम्मिलित करता है या हटाता है। (यह पेड़ में वर्तमान में नोड्स की संख्या में समय और स्थान में लघुगणक है, और संशोधन बिंदु से जड़ तक नए नोड बनाना शामिल है, और डेटा संरचना के पिछले संस्करण के पुराने भागों में बस सब कुछ नया इंगित करता है। )
  3. वैश्विक पॉइंटर को मूल रूप से तुलना और स्वैप करें। (ध्यान दें कि यदि आप पुराने रूट पॉइंटर को रिकॉर्ड करते समय और अब के बीच एक और संशोधन हुआ है तो यह विफल हो सकता है। यदि ऐसा होता है तो आप चरण 1 पर वापस जाते हैं और फिर से प्रयास करते हैं। यह तथाकथित "आशावादी संगामिति नियंत्रण है।")

ध्यान दें कि सबसे महत्वपूर्ण हिस्सा है जो मैंने उपर्युक्त प्रतिनिधित्वकर्ता को बनाए रखने की आवश्यकता के बारे में कहा था। आमतौर पर एक एल्गोरिथ्म होना पर्याप्त नहीं है जो पेड़ के बीच में परमाणु परिवर्तन करता है। क्यों? उदाहरण के लिए: आपके पास एक रीडर थ्रेड हो सकता है जो ट्री के प्रीऑर्डर ट्रैवर्स करने की प्रक्रिया में है। यदि आप एक नोड को संशोधित करते हैं जो उस नोड के पूर्वज हैं जो वे वर्तमान में पढ़ रहे हैं तो आप उन पूर्व शर्तों को अमान्य करने जा रहे हैं जो उन्होंने सोचा था कि वे लागू किए गए थे। पाठक को डेटा संरचना के साथ ठीक उसी तरह काम करने में सक्षम होना चाहिए, जैसा कि आपने अपना परिवर्तन करने से पहले किया था, या ठीक वैसा ही जैसा कि आपके परिवर्तन के बाद होगा। बीच में कुछ नहीं।

O(log(N))O(N)


मुझे लगता है कि सक्रिय वेटिंग तकनीक, उदाहरण के लिए तुलना-और-स्वैप के साथ, आमतौर पर "लॉक फ्री" कहा जाता है, इसलिए म्यूटेबल सेटिंग में भी कुछ तरीके हैं।
राफेल

मैं सक्रिय प्रतीक्षा शब्द से परिचित नहीं हूं (और Google मदद नहीं कर रहा है)। (यदि आप कोगन और पेट्रैंक के काम के बारे में बात कर रहे हैं, तो यह दिखा रहा है कि प्रतीक्षा-मुक्त करने के लिए लॉक-फ्री एल्गोरिदम को कैसे चालू किया जाए।) मैंने एक संपादन जोड़ा है कि आप सामान्य रूप से लॉक-फ्रीडम के लिए परिवर्तनशीलता से कैसे निपट सकते हैं।
भटकते हुए तर्क

"सक्रिय प्रतीक्षा" से मेरा मतलब कुछ ऐसा है while ( !P ) { noOp(); } doWork();जहाँ या जैसा noOpहो सकता है sleep
राफेल

में संपादित हिस्सा है, आप परिवर्तनशील डेटा संरचनाओं ताला मुक्त बनाने के लिए तकनीक का उल्लेख किया। जैसा कि संकेत दिया गया है, हम संपूर्ण डेटा संरचना की प्रतिलिपि बनाते हैं, प्रतिलिपि के लिए मॉड बनाते हैं और फिर CAS आदिम का उपयोग करते हैं। हालांकि, कैसे Copyकदम परमाणु बनाने के लिए ? यह एक और कठिन समस्या प्रतीत होती है atomic snapshot
hengxin

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