2013-03-05 7 views
5

मैं क्रमशः पारस्परिक बहिष्कार और डेडलॉक को परिभाषित करता हूं: पारस्परिक बहिष्करण स्थिति मौजूद है यदि हर पल में, प्रत्येक साझा संसाधन को या तो बिल्कुल एक प्रक्रिया या उपलब्ध कराया जाता है। प्रक्रियाओं का एक सेट deadlocked है अगर सेट में प्रत्येक प्रक्रिया एक घटना के लिए इंतजार कर रहा है कि सेट में केवल एक और प्रक्रिया का कारण बन सकता है।यदि आपसी बहिष्करण की गारंटी है, तो सेमफोरस के साथ कहें, एक कार्यक्रम डेडलॉक मुक्त है?

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

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

चूंकि परस्पर बहिष्करण की गारंटी है, इस कार्यक्रम में, डेडलॉक-मुक्त है?

सम्मान।

उत्तर

6

आवश्यक नहीं है। इन दो धागे की कल्पना कीजिए:

Thread 1   Thread 2 
============  ============= 
Acquire A   Acquire B 
Acquire B   Acquire A 
Release B   Release A 
Release A   Release B 

यहाँ, पारस्परिक अपवर्जन वास्तव में गारंटी है - प्रत्येक पल में, संकेतबाहु ए और बी या तो धागे के एक या एक से उपलब्ध सिस्टमवाइड के स्वामित्व में हैं - लेकिन गतिरोध अभी भी संभव है यदि थ्रेड 1 और 2 प्रत्येक अपना पहला लॉक प्राप्त करता है (थ्रेड 1 के लिए ए, बी थ्रेड 2 के लिए बी), लेकिन फिर उस संसाधन के लिए प्रतीक्षा कर देगा जो दूसरे को पकड़ रहा है।

आशा है कि इससे मदद मिलती है!

संबंधित मुद्दे