बहुत बढ़िया सवाल। मुझे याद नहीं है कि हमारा CS 102 पाठ्यक्रम डबल-एंडेड कतार के लिए एक भी आवेदन का उल्लेख कर रहा है।
आज तक, मुझे पता है कि एकमात्र आवेदन विकिपीडिया लेख में वर्णित कार्य-चोरी शेड्यूलर है ।
यह अनिवार्य रूप से निम्नानुसार काम करता है:
एक सामान्य, एकल-थ्रेडेड प्रक्रियात्मक मॉडल में, प्रत्येक फ़ंक्शन कॉल तथाकथित कॉल स्टैक पर एक सक्रियण रिकॉर्ड को धकेलता है । एक सक्रियण रिकॉर्ड में स्थानीय चर और उस कॉल के पैरामीटर होते हैं। एक बार विधि के लिए कॉल पूरा होने पर ("रिटर्न"), अंतिम सक्रियण रिकॉर्ड कॉल स्टैक से पॉप होता है।
यह विशेष रूप से महत्वपूर्ण है क्योंकि इस तरह से पुनरावर्तन लागू किया जाता है: कॉल स्टैक की वर्तमान स्थिति में पुनरावर्तन की संरचना का प्रतिनिधित्व किया जाता है।
एक पुनरावर्ती एल्गोरिदम को समानांतर करते समय, हम कॉल स्टैक के साथ कॉल स्टैक को प्रतिस्थापित करके इस संपत्ति का शोषण कर सकते हैं। अभिकलन में प्रत्येक थ्रेड को अपनी स्वयं की कॉल कतार मिलती है और अनुक्रमिक निष्पादन की तरह धकेलती है और सक्रियण रिकॉर्ड करती है।
लेकिन एक बार जब एक थ्रेड ने अपना काम पूरा कर लिया है (= इसकी कॉल कतार खाली है), यह "गलत" छोर से हटाकर उस थ्रेड की कॉल कतार से एक सक्रियण रिकॉर्ड को हटाकर दूसरे धागे से काम चुरा लेता है ।
असल में, कॉल कतार दो कॉल स्टैक के रूप में कार्य करती है जो अब दो थ्रेड की सेवा करती है।