डेडलॉक

समवर्ती कंप्यूटिंग में, डेडलॉक ऐसी कोई भी स्थिति है जिसमें संस्थाओं के कुछ समूह का कोई भी सदस्य आगे नहीं बढ़ सकता है क्योंकि प्रत्येक अन्य सदस्य के लिए प्रतीक्षा करता है, जिसमें स्वयं भी सम्मिलित है, जैसे कि संदेश भेजना या अधिक सामान्य रूप से लॉक (कंप्यूटर विज्ञान) जारी करना। बहु संसाधन प्रणाली, समानांतर कंप्यूटिंग और वितरित अभिकलन में डेडलॉक एक सामान्य समस्या है, क्योंकि इन संदर्भों में प्रणाली प्रायः साझा संसाधनों की मध्यस्थता और समकालन (कंप्यूटर विज्ञान) को लागू करने के लिए सॉफ़्टवेयर या हार्डवेयर लॉक का उपयोग करते हैं।

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

एक संचार प्रणाली में, संसाधनों के लिए विवाद के स्थान पर मुख्य रूप से संकेतों के नुकसान या भ्रष्टाचार के कारण डेडलॉक उत्पन्न होता है।

[[File:Two processes, two resources.gif|thumbnail|विपरीत क्रम में दो संसाधनों के लिए प्रतिस्पर्धा करने वाली दो प्रक्रियाएँ।1. एक ही प्रक्रिया से पारित होती है।

2. बाद की प्रक्रिया के लिए इंतजार करना पड़ता है।

3. डेडलॉक तब होता है जब पहली प्रक्रिया पहले संसाधन को उसी समय बंद कर देती है जब दूसरी प्रक्रिया दूसरे संसाधन को बंद कर देती है।

4. पहली प्रक्रिया को रद्द करके और पुनः आरंभ करके गतिरोध को हल किया जा सकता है।|344x344px]]

डेडलॉक के लिए व्यक्तिगत रूप से आवश्यक और संयुक्त रूप से पर्याप्त स्थिति
किसी संसाधन पर डेडलॉक की स्थिति केवल तभी उत्पन्न हो सकती है जब निम्नलिखित सभी स्थितियाँ एक साथ एक प्रणाली में उत्पन्न होती हैं: एडवर्ड जी कॉफ़मैन, जूनियर द्वारा 1971 के एक लेख में इन चार स्थितियों को उनके पहले विवरण से कॉफ़मैन परिस्थिति के रूप में जाना जाता है।
 * 1) पारस्परिक बहिष्करण: गैर-साझा करने योग्य प्रणाली में कम से कम एक संसाधन होना चाहिए; अर्थात्, एक समय में केवल एक ही प्रक्रिया संसाधन का उपयोग कर सकती है। अन्यथा, आवश्यक होने पर प्रक्रियाओं को संसाधन का उपयोग करने से नहीं रोका जाएगा। किसी भी समय केवल एक प्रक्रिया संसाधन का उपयोग कर सकती है।
 * 2) कोई पूर्वक्रय (कम्प्यूटिंग) नहीं: किसी संसाधन को केवल धारण करने वाली प्रक्रिया द्वारा स्वेच्छा से जारी किया जा सकता है।
 * 3) वृत्ताकार प्रतीक्षा: प्रत्येक प्रक्रिया को एक संसाधन के लिए प्रतीक्षा करनी चाहिए जो किसी अन्य प्रक्रिया द्वारा आयोजित की जा रही है, जो बदले में संसाधन जारी करने के लिए पहली प्रक्रिया की प्रतीक्षा कर रही है। सामान्य तौर पर, प्रतीक्षा प्रक्रियाओं का एक सम्मुच्चय (गणित)  P = {P1, P2, …, PN} होता है, यह इस प्रकार है कि P1 P2 के पास उपस्थित संसाधन की प्रतीक्षा कर रहा है, P2 P3 के पास उपस्थित संसाधन की प्रतीक्षा कर रहा है और इतने पर जब तक PN P1 के पास उपस्थित संसाधन की प्रतीक्षा कर रहा है।

जबकि ये स्थितियाँ एकल-आवृत्ति संसाधन प्रणालियों पर डेडलॉक उत्पन्न करने के लिए पर्याप्त हैं, वे केवल संसाधनों के कई उदाहरणों वाले प्रणाली पर डेडलॉक की संभावना का संकेत देती हैं।

डेडलॉक प्रबंधन
अधिकांश वर्तमान ऑपरेटिंग प्रणाली डेडलॉक को नहीं रोक सकते। जब एक डेडलॉक होता है, तो विभिन्न ऑपरेटिंग प्रणाली अलग-अलग गैर-मानक तरीके से उनका जवाब देते हैं। अधिकांश दृष्टिकोण चार सामान्य स्थितियों में से एक को (विशेष रूप से चौथे को) होने से रोककर काम करते हैं। प्रमुख दृष्टिकोण इस प्रकार हैं।

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

डेडलॉकों को अनदेखा करना सुरक्षित रूप से किया जा सकता है यदि डेडलॉकों का औपचारिक सत्यापन कभी नहीं होता है। एक उदाहरण आरटीआईसी ढांचा है।

जांच
डेडलॉक का पता लगाने के अंतर्गत, डेडलॉक होने की अनुमति है। फिर प्रणाली की स्थिति की जांच की जाती है ताकि यह पता लगाया जा सके कि डेडलॉक हुआ है और बाद में इसे ठीक किया गया है। एक कलन विधि कार्यरत है जो संसाधन आवंटन और प्रक्रिया की स्थिति को पथानुसरण करता है, यह पता लगाए गए डेडलॉक को दूर करने के लिए वापस रोल करता है और एक या अधिक प्रक्रियाओं को पुनरारंभ करता है। एक डेडलॉक का पता लगाना जो पहले से ही हो चुका है, आसानी से संभव है क्योंकि प्रत्येक प्रक्रिया ने जिन संसाधनों को बंद किया है और/या वर्तमान में अनुरोध किया है, वे ऑपरेटिंग सिस्टम के संसाधन अनुसूचक के लिए जाने जाते हैं।

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

रोकथाम
[[File:Avoiding deadlock.gif|265x265px|thumbnail|right|(ए) पहले पाओ की नीति का पालन करते हुए दो प्रक्रियाएँ एक संसाधन के लिए प्रतिस्पर्धा करती हैं।(बी) डेडलॉक तब होता है जब दोनों प्रक्रियाएं संसाधन को एक साथ लॉक कर देती हैं।

(सी) तालों की समरूपता को तोड़कर डेडलॉक को हल किया जा सकता है।

(डी) लॉकिंग तंत्र की समरूपता को तोड़कर डेडलॉक को रोका जा सकता है।]]चार कॉफमैन स्थितियों में से एक को होने से रोककर डेडलॉक की रोकथाम काम करती है।
 * पारस्परिक बहिष्करण परिस्तिथि को हटाने का अर्थ है कि किसी भी प्रक्रिया की किसी संसाधन तक अनन्य पहुँच नहीं होगी। यह उन संसाधनों के लिए असंभव सिद्ध होता है जो अटेरन नहीं हो सकते। लेकिन बिखरे हुए संसाधनों के साथ भी, डेडलॉक अभी भी हो सकता है। पारस्परिक बहिष्करण से बचने वाले कलन विधि को गैर-अवरुद्ध समकालन कलन विधि कहा जाता है।
 * होल्ड एंड वेट या रिसोर्स होल्डिंग की स्थिति को उन सभी संसाधनों का अनुरोध करने के लिए प्रक्रियाओं की आवश्यकता के द्वारा हटाया जा सकता है, जिनकी उन्हें प्रारम्भ करने से पहले (या संचालन के किसी विशेष सम्मुच्चय को प्रारम्भ करने से पहले) आवश्यकता होगी। यह उन्नत ज्ञान प्रायः संतुष्ट करना कठिन होता है और किसी भी स्तिथि में संसाधनों का अक्षम उपयोग होता है। दूसरा तरीका यह है कि संसाधनों का अनुरोध करने के लिए प्रक्रियाओं की आवश्यकता तभी हो जब उसके पास कोई न हो; सबसे पहले, उन्हें उन सभी संसाधनों का अनुरोध करने से पहले अपने सभी वर्तमान संसाधनों को जारी करना होगा जिनकी उन्हें प्रारम्भ से आवश्यकता होगी। यह भी कई बार अव्यवहारिक होता है। ऐसा इसलिए है क्योंकि संसाधन आवंटित किए जा सकते हैं और लंबे समय तक अप्रयुक्त रह सकते हैं। साथ ही, एक लोकप्रिय संसाधन की आवश्यकता वाली प्रक्रिया को अनिश्चित काल तक इंतजार करना पड़ सकता है, क्योंकि ऐसे संसाधन हमेशा किसी प्रक्रिया को आवंटित किए जा सकते हैं, जिसके परिणामस्वरूप संसाधन भुखमरी हो सकती है। (ये कलन विधि, जैसे कि क्रमबद्ध टोकन, को ऑल-ऑर-नो कलन विधि के रूप में जाना जाता है।)
 * नो प्रीमेशन (कंप्यूटिंग) की स्थिति से बचना कठिन या असंभव भी हो सकता है क्योंकि एक प्रक्रिया को एक निश्चित समय के लिए संसाधन रखने में सक्षम होना चाहिए, या प्रसंस्करण परिणाम असंगत हो सकता है या थ्रैशिंग (कंप्यूटर विज्ञान) हो सकता है। हालांकि, प्रीमेशन को लागू करने में असमर्थता प्राथमिकता कलन विधि में हस्तक्षेप कर सकती है। लॉक आउट संसाधन की रोकथाम सामान्यतः रोलबैक (डेटा प्रबंधन) का तात्पर्य है, और इससे बचा जाना चाहिए क्योंकि यह शिरोपरी में बहुत महंगा है। प्रीमेशन की अनुमति देने वाले कलन विधि में लॉक-फ्री और वेट-फ्री कलन विधि और आशावादी समवर्ती नियंत्रण सम्मिलित हैं। यदि कोई प्रक्रिया कुछ संसाधनों को धारण करती है और किसी अन्य संसाधन (संसाधनों) के लिए अनुरोध करती है जिसे तुरंत आवंटित नहीं किया जा सकता है, तो उस प्रक्रिया के सभी वर्तमान संसाधनों को जारी करके स्थिति को हटाया जा सकता है।
 * अंतिम स्थिति वृत्ताकार प्रतीक्षा स्थिति है। वृत्ताकार प्रतीक्षा से बचने वाले दृष्टिकोणों में महत्वपूर्ण वर्गों के दौरान रुकावटों को अक्षम करना और संसाधनों का आंशिक क्रम निर्धारित करने के लिए पदानुक्रम का उपयोग करना सम्मिलित है। यदि कोई स्पष्ट पदानुक्रम उपस्थित नहीं है, तो संसाधनों के स्मृति पते का भी क्रम निर्धारित करने के लिए उपयोग किया गया है और गणना के बढ़ते क्रम में संसाधनों का अनुरोध किया जाता है। दिज्क्स्ट्रा के समाधान का भी उपयोग किया जा सकता है।

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

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

लाइवलॉक
लाइवलॉक एक डेडलॉक के समान है, अतिरिक्त इसके कि लाइवलॉक में सम्मिलित प्रक्रियाओं की स्थिति एक दूसरे के संबंध में लगातार बदलती रहती है, कोई भी प्रगति नहीं करता है।

यह शब्द 1975 के पेपर में एडवर्ड ए. एशक्रॉफ्ट द्वारा एयरलाइन बुकिंग प्रणाली की जांच के संबंध में गढ़ा गया था।  लाइवलॉक संसाधन भुखमरी की एक विशेष स्तिथि है; सामान्य परिभाषा केवल यह बताती है कि एक विशिष्ट प्रक्रिया प्रगति नहीं कर रही है।

लाइवलॉक कुछ कलन विधि के साथ एक जोखिम है जो डेडलॉक का पता लगाता है और उससे उबरता है। यदि एक से अधिक प्रक्रियाएँ कार्रवाई करती हैं, तो डेडलॉक अभिज्ञान कलन विधि को बार-बार प्रेरित किया जा सकता है। यह सुनिश्चित करके इससे बचा जा सकता है कि केवल एक प्रक्रिया (स्वेच्छाचारी ढंग से या प्राथमिकता से चुनी गई) कार्रवाई करती है।

वितरित डेडलॉक
वितरित लेन-देन या समवर्ती नियंत्रण का उपयोग किए जाने पर वितरित डेडलॉक वितरित प्रणाली में हो सकते हैं।

वितरित डेडलॉक्स का पता या तो डेडलॉक संसूचक पर स्थानीय प्रतीक्षा के लिए लेखाचित्र से सार्वभौमिक वेट-फ़ॉर लेखाचित्र बनाकर या सीमा उत्कीर्णन जैसे वितरित कलन विधि द्वारा लगाया जा सकता है।

फैंटम डेडलॉक वे डेडलॉक हैं जो प्रणाली आंतरिक देरी के कारण वितरित प्रणाली में गलत तरीके से पहचाने जाते हैं लेकिन वास्तव में उपस्थित नहीं होते हैं।

उदाहरण के लिए, यदि कोई प्रक्रिया एक संसाधन R1 जारी करती है और R2 के लिए एक अनुरोध जारी करती है, और पहला संदेश खो जाता है या विलंबित हो जाता है, तो एक समन्वयक (डेडलॉक का पता लगाने वाला) गलत तरीके से डेडलॉक का निष्कर्ष निकाल सकता है (यदि R1 होने के दौरान R2 के लिए अनुरोध एक कारण होगा डेडलॉक)।

यह भी देखें

 * एपोरिया
 * बैंकर की कलन विधि
 * कैच -22 (तर्क)
 * वृत्तीय संदर्भ
 * भोजन दार्शनिकों की समस्या
 * फाइल लॉकिंग
 * ग्रिडलॉक (वाहन यातायात में)
 * हैंग (कंप्यूटिंग)
 * [[गतिरोध]]
 * अनंत लूप
 * रैखिकता
 * मॉडल चेकर का उपयोग औपचारिक रूप से यह सत्यापित करने के लिए किया जा सकता है कि सिस्टम कभी गतिरोध में प्रवेश नहीं करेगा
 * ऑस्ट्रिच कलन विधि
 * प्राथमिकता उलटा
 * दौड़ की स्थिति
 * पाठक-लेखक ताला
 * नींद नाई की समस्या
 * गतिरोध
 * तुल्यकालन (कंप्यूटर विज्ञान)
 * टर्न रेस्ट्रिक्शन रूटिंग

बाहरी संबंध

 * "Advanced Synchronization in Java Threads" by Scott Oaks and Henry Wong
 * Deadlock Detection Agents
 * DeadLock at the Portland Pattern Repository
 * Etymology of "Deadlock"