पेटर्सन और डेकर के एल्गोरिदम का विरोधाभास


41

मैं पीटरसन और डेकर द्वारा एल्गोरिदम को समझने की कोशिश कर रहा हूं जो बहुत समान हैं और बहुत सारे समरूपता प्रदर्शित करते हैं।

मैंने अनौपचारिक भाषा में एल्गोरिदम को इस प्रकार बनाने की कोशिश की:

Peterson's: "I want to enter."                 flag[0]=true;
            "You can enter next."              turn=1;
            "If you want to enter and          while(flag[1]==true&&turn==1){
            it's your turn I'll wait."         }
            Else: Enter CS!                    // CS
            "I don't want to enter any more."  flag[0]=false;

Dekker's:   "I want to enter."                 flag[0]=true;
            "If you want to enter              while(flag[1]==true){
             and if it's your turn               if(turn!=0){
             I don't want to enter any more."      flag[0]=false;
            "If it's your turn                     while(turn!=0){
             I'll wait."                           }
            "I want to enter."                     flag[0]=true;
                                                 }
                                               }
            Enter CS!                          // CS
            "You can enter next."              turn=1;
            "I don't want to enter any more."  flag[0]=false;

अंतर ऐसा लगता "You can enter next."है कि जहां बिंदु होता है और वह तथ्य जो "if it's your turn I don't want to enter any more."डेकर में होता है।

पीटरसन के एल्गोरिथ्म में, दो प्रक्रियाएं प्रमुख लगती हैं। जब तक यह दूसरे की बारी नहीं है एक प्रक्रिया महत्वपूर्ण खंड में अपना रास्ता मजबूर करने लगती है।

इसके विपरीत, डेकर के एल्गोरिथ्म में, दो प्रक्रियाएं विनम्र और विनम्र लगती हैं। यदि दोनों प्रक्रियाएँ महत्वपूर्ण खंड में प्रवेश करना चाहती हैं, और यह दूसरे की बारी है, तो यह प्रक्रिया तय करती है कि अब प्रवेश नहीं करना है। (क्या यह भुखमरी-स्वतंत्रता के लिए आवश्यक है? क्यों?)

ये एल्गोरिदम कितने अलग हैं? मुझे लगता है कि जब दोनों प्रक्रियाएं पीटरसन में महत्वपूर्ण खंड में प्रवेश करने की कोशिश करती हैं, तो प्रक्रिया कहती है "मैं प्रवेश करता हूं", जबकि डेकर की प्रक्रिया कहती है "आप प्रवेश कर सकते हैं"। क्या प्रत्येक एल्गोरिथ्म में प्रक्रियाओं के व्यवहार का तरीका कोई साफ कर सकता है? क्या इसे अनौपचारिक शब्दों में रखने का मेरा तरीका सही है?


ध्यान दें कि पीटरसन का एल्गोरिथ्म महत्वपूर्ण खंड समस्या को पूरी तरह से हल नहीं करता है, क्योंकि झंडे में लिखता है और स्वयं महत्वपूर्ण अनुभाग समस्याएं हैं। एक पेपर जो वास्तव में पूरी तरह से समस्या को हल करता है, वह है "आरबिटर: एक्टिव सिस्टम कंपोनेंटिंग इंप्लीमेंटिंग प्राइमरीवेटिंग प्राइमरीज़", हेंक जेएम गोमैन द्वारा।
user3083171

जवाबों:


24

एल्गोरिदम का आपका अनौपचारिक वर्णन अद्भुत है।

मुझे लगता है कि दोनों मामलों में लेखक सबसे सरल समाधान के साथ आने की कोशिश कर रहा था, जो कि आपसी बहिष्कार और गतिरोध स्वतंत्रता की गारंटी दे सकते थे। न तो एल्गोरिथ्म भुखमरी मुक्त या निष्पक्ष है।[संपादित करें: जैसा कि टिप्पणियों में बताया गया है, पीटरसन का एल्गोरिथ्म भुखमरी मुक्त और निष्पक्ष है]। सिर्फ लोड और स्टोर निर्देशों का उपयोग करते हुए डेकर का समाधान पहला आपसी बहिष्कार एल्गोरिथ्म था। इसे डेज्क्ट्रा, एग्जर डब्ल्यू। में पेश किया गया था ; एफ। गेनुइज, एड।, प्रोग्रामिंग लैंग्वेजेस: नाटो एडवांस्ड स्टडी इंस्टीट्यूट , पीपी। 43-112, अकादमिक प्रेस, 1968 में "अनुक्रमिक प्रक्रियाओं का सहयोग" । यदि आप पेपर के माध्यम से पढ़ते हैं, तो आप कई प्रयासों के माध्यम से दिक्जस्त्र काम को देखते हैं, प्रत्येक के साथ समस्या को पहचानते हैं, और फिर अगले संस्करण के लिए थोड़ा और जोड़ते हैं। उनके एल्गोरिथ्म की अक्षमता का हिस्सा इस तथ्य से आता है कि वह एक टर्न-टेक एल्गोरिथ्म के साथ शुरू होता है और फिर इसे संशोधित करने की कोशिश करता है ताकि प्रक्रियाओं को किसी भी क्रम में प्रगति करने की अनुमति मिल सके। (सिर्फ 0,1,0,1, ...)

पीटरसन के एल्गोरिथ्म को 1981 में प्रकाशित किया गया था, डेकर के एल्गोरिदम के बारे में एक दशक से अधिक के अनुभव और बाधा के बाद। पीटरसन डेकर की तुलना में बहुत सरल एल्गोरिदम चाहते थे ताकि शुद्धता का प्रमाण बहुत आसान हो। आप देख सकते हैं कि वह अपने कागज के शीर्षक से समुदाय के साथ कुछ निराशा महसूस कर रहा था। पीटरसन, जीएल; "आपसी बहिष्कार समस्या के बारे में मिथक," Inf। प्रोक। लेट्ट। , 12 (3): 115-116, 1981। बहुत जल्दी पढ़ा और बहुत अच्छा लिखा। (और औपचारिक तरीकों के बारे में स्पष्ट टिप्पणी अनमोल है।) पीटरसन का पेपर उस प्रक्रिया पर भी चर्चा करता है जिसके द्वारा उन्होंने सरल प्रयासों से अपना समाधान बनाया। (चूँकि उनका समाधान सरल है, इसके लिए कम मध्यवर्ती चरणों की आवश्यकता थी।) ध्यान दें कि मुख्य अंतर (जिसे आप "प्रभुत्व" के बजाय "प्रभुत्व" कहते हैं) वह यह है कि क्योंकि पीटरसन ने नए सिरे से शुरुआत की थी (टर्न-टेक एल्गोरिथ्म से नहीं डायजेस्ट्रा ने शुरू किया था) ) उसकी प्रतीक्षा लूप सरल और अधिक कुशल है। उसे पता चलता है कि वह बस साधारण लूप परीक्षण से दूर हो सकता है, जबकि दिज्क्स्त्र को हर बार बैकऑफ और फिर से प्रयास करना पड़ा।

मुझे लगता है कि मुझे लैम्पपोर्ट के क्लासिक बेकरी एल्गोरिदम पेपर का भी उल्लेख करना चाहिए: लैमपोर्ट, लेस्ली; "ए न्यू सॉल्यूशन ऑफ दिजक्स्ट्रा समवर्ती प्रोग्रामिंग प्रॉब्लम", कॉम एसीएम 17 (8): 453-455, 1974 । डेकोर के एल्गोरिथ्म (और निश्चित रूप से 2 से अधिक प्रोसेसर के मामले में सरल) की तुलना में बेकरी एल्गोरिथ्म यकीनन सरल है, और विशेष रूप से दोष सहिष्णु होने के लिए डिज़ाइन किया गया है। मैं विशेष रूप से दो कारणों से इसका उल्लेख करता हूं। पहला, क्योंकि यह पारस्परिक बहिष्करण समस्या की परिभाषा के बारे में थोड़ा इतिहास देता है और इसे 1974 तक हल करने का प्रयास करता है। दूसरा, क्योंकि बेकरी एल्गोरिथ्म दर्शाता है कि आपसी बहिष्करण समस्या को हल करने के लिए किसी भी हार्डवेयर परमाणु की आवश्यकता नहीं है।

अंत में, मेरा एक विशेष पसंदीदा लैम्पपोर्ट, लेस्ली है; "एक तेज़ म्यूचुअल बहिष्करण एल्गोरिथम," एसीएम ट्रांस। अनि। Sys। , 5 (1): 1-11, 1987। इस पत्र में लैम्पपोर्ट (आम) मामले में आपसी बहिष्करण समस्या के समाधान का अनुकूलन करने की कोशिश कर रहा था कि महत्वपूर्ण खंड के लिए थोड़ा विवाद है। फिर, यह पारस्परिक बहिष्करण और गतिरोध स्वतंत्रता की गारंटी देता है, लेकिन निष्पक्षता नहीं। यह (मेरा मानना ​​है) केवल सामान्य रीडिंग का उपयोग करके पहला पारस्परिक बहिष्करण एल्गोरिदम है और लिखता है कि जब कोई विवाद नहीं है तो ओ (1) समय में एन प्रोसेसर को सिंक्रनाइज़ कर सकते हैं। (जब कोई विवाद होता है, तो यह एक O (N) परीक्षण पर वापस आ जाता है।) वह एक अनौपचारिक प्रदर्शन देता है कि आप सबसे अच्छा विवाद निरोधी मामले में सात मेमोरी एक्सेस कर सकते हैं। (डेकर और पीटरसन दोनों इसे 4 के साथ करते हैं, लेकिन वे केवल 2 प्रोसेसर संभाल सकते हैं, जब आप उनके एल्गोरिदम को एन तक बढ़ाते हैं तो उन्हें अतिरिक्त ओ (एन) एक्सेस को जोड़ना होगा।)

सभी में: मैं कहूंगा कि डेकर का एल्गोरिथ्म अपने आप में मुख्य रूप से एक ऐतिहासिक परिप्रेक्ष्य से दिलचस्प है। डीजकस्ट्रा के पेपर ने पारस्परिक बहिष्कार समस्या के महत्व को समझाया, और यह प्रदर्शित किया कि इसे हल किया जा सकता है। लेकिन कई वर्षों से हिंडकी की तुलना में सरल (और अधिक कुशल) समाधान पाए गए हैं।


3
>> न तो एल्गोरिथ्म भुखमरी मुक्त या निष्पक्ष है। वह सत्य नहीं है। पीटरसन का एल्गोरिथ्म भुखमरी मुक्त और निष्पक्ष है। यदि एक थ्रेड महत्वपूर्ण खंड में है और दूसरा वेटिंग लूप में इंतजार कर रहा है - एक वेटिंग अगले सीएस में मिल जाएगी, भले ही वह धागा जो सीएस में था, बहुत तेजी से हो।

मैं इस बात पर जोर देना चाहूंगा कि पीटरसन का एल्गोरिथ्म भुखमरी मुक्त और निष्पक्ष है , यदि केवल user24190 की टिप्पणी को दोहराने के लिए। मुझे समझ नहीं आ रहा है कि इतने वर्षों के बाद, इस उत्तर के लेखक ने या तो टिप्पणी का जवाब नहीं दिया और न ही अपने उत्तर को सही किया। (उत्तर को सही करने के बाद मुझे पिंग करना सुनिश्चित करें ताकि मैं अपनी इस टिप्पणी को हटा
सकूं

पीटरसन की "आपसी बहिष्कार समस्या के बारे में मिथक" खरीदने के लिए लिंक: doi.org/10.1016/0020-0190(81)90106-X
strager

पीटरसन की "आपसी बहिष्कार समस्या के बारे में मिथक" (पुरालेख.org): web.archive.org/web/20150501155424/https://cs.nyu.edu/~lerner/…
strash

3

निम्नलिखित पेपर में हम पीटरसन और डेकर के एल्गोरिदम (और कुछ अन्य) के लिए औपचारिक मॉडल देते हैं और हमने उनके गुणों को साबित करने के लिए मॉडल चेकर का इस्तेमाल किया। कृपया, हमारे परिणाम नीचे दी गई तालिका में देखें (कॉलम "डेडलॉक" और "डाइवर्जेंट" हमारे मॉडल को देखें, "ME" = TRUE का अर्थ है कि एल्गोरिथ्म सही है, "ओवरटेकिंग" = TRUE का अर्थ है कि यह उचित है)।

आर। मेओलिक, टी। कापस, जेड। ब्रेज़ोनिक ACTLW - एक क्रिया-आधारित कम्प्यूटेशन ट्री लॉजिक जब तक बिना ऑपरेटर के। सूचना विज्ञान, 178 (6), पीपी। 1542-1557, 2008।

https://doi.org/10.1016/j.ins.2007.10.023

यहाँ छवि विवरण दर्ज करें


1

पीटरसन एल्गोरिदम पर महत्वपूर्ण खंड में प्रवेश करने का अधिक सख्त दबाव है, जहां डीकेकर का एल्गोरिथ्म अपेक्षाकृत नरम और कम आक्रामक है। इसे और अधिक स्पष्ट करने के लिए, आइए हम ईरानी संस्कृति के बारे में एक उदाहरण देखें। इस उदाहरण में जाने से पहले, यह जानना अच्छा है कि कहीं भी प्रवेश करते समय ईरानी लोगों का एक दूसरे के प्रति वास्तविक नरम व्यवहार होता है! मान लें कि दो ईरानी पुरुष एक घर में प्रवेश करने जा रहे हैं, और उस घर में प्रवेश करने के लिए केवल एक दरवाजा है।

अब दूसरी संस्कृति ( ज़ोम्बियन कल्चर ) के दो आदमियों की कल्पना करें, जो वे वास्तव में कहीं प्रवेश करते समय एक-दूसरे की बहुत परवाह नहीं करते हैं ( यह किसी से पूछना सम्मान का विषय है कि वह प्रवेश करना चाहता है या नहीं )।

समस्या के बारे में जानकारी को स्पष्ट करने के लिए हम कह सकते हैं कि:

  • दो ईरानी = डेकर एल्गोरिथ्म का उपयोग करते हुए दो प्रक्रियाएं
  • दो Zombians = पीटरसन एल्गोरिथ्म का उपयोग करते हुए दो प्रक्रियाएँ

तो आइए जानें कि प्रत्येक एल्गोरिथ्म ( संस्कृति ) में क्या किया गया है । निम्नलिखित टिप्पणियां पहले ईरानी व्यक्ति के लिए हैं जो डेकर एल्गोरिथ्म का उपयोग करते हुए घर में प्रवेश करने जा रहे हैं :

p0:
   wants_to_enter[0] ← true // Goes through the house entrance
   while wants_to_enter[1] { // If the other man wants to enter too
      if turn ≠ 0 { // Then see if it is your turn or not
         wants_to_enter[0] ← false // If it is not your turn don't go furthur
         while turn ≠ 0 { // and wait until it is your turn
           // busy wait
         }
         wants_to_enter[0] ← true // when it is your turn go through the door
      }
   }

   // critical section
   ...
   turn ← 1
   wants_to_enter[0] ← false // Set the turn for the other man
   // remainder section

हमारे पास दो ज़ोम्बियन भी हैं जो पीटरसन एल्गोरिदम का उपयोग करके घर में प्रवेश करने जा रहे हैं । यह इस प्रकार है:

P0:     
  flag[0] = true; // Goes through the house entrance
  turn = 1; // Set the turn for himself
  while (flag[1] && turn == 1) // Wait until the other one is going in
  {
   // busy wait
  }
   // critical section
      ...
   // end of critical section
  flag[0] = false; // Done going inside

यह उल्लेख करना महत्वपूर्ण है कि दोनों अंदर नहीं जा रहे हैं, जबकि दूसरा ऐसा कर रहा है ( म्युचुअल एक्सक्लूज़न ) लेकिन, ईरानी लोग बहुत अधिक नरम हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.