डेडलॉक

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

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

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

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

2. The later process has to wait.

3. A deadlock occurs when the first process locks the first resource at the same time as the second process locks the second resource.

4. The deadlock can be resolved by cancelling and restarting the first process.]]

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

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

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

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

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

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

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

रोकथाम
[[File:Avoiding deadlock.gif|380px|thumbnail|right|(ए) पहले आओ, पहले पाओ की नीति का पालन करते हुए दो प्रक्रियाएँ एक संसाधन के लिए प्रतिस्पर्धा करती हैं।

(बी) गतिरोध तब होता है जब दोनों प्रक्रियाएं संसाधन को एक साथ लॉक कर देती हैं।

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

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

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

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

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

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

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

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

फैंटम गतिरोध गतिरोध हैं जो सिस्टम आंतरिक देरी के कारण वितरित सिस्टम में गलत तरीके से पहचाने जाते हैं लेकिन वास्तव में मौजूद नहीं होते हैं।

उदाहरण के लिए, यदि कोई प्रक्रिया एक संसाधन 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"