Wednesday, 15 August 2012

c - reader-writer :how could this code lead to deadlock -


  शून्य एक्स () {ताला (& amp; m); जबकि (एक्स || वाई) रुको (एंड फार्पर, एंड एम); X ++; (मी & amp) अनलॉक; // डू एक्स सामान लॉक (& amp; m); एक्स --; प्रसारण (& amp; farpar); (मी & amp) अनलॉक; } डबल वाई () (लॉक (एंड एम); जबकि (x) रुको (और थर्पर, & amp; m); वाई ++; (मी & amp) अनलॉक; // डू वाई सामान लॉक (& amp; m); वाई -; प्रसारण (& amp; farpar); (मी & amp) अनलॉक; }  

उपरोक्त कोड में, m एक म्यूट एक्स है, और फ़ॉर्पर हालत चर है मुझे बताया गया है कि यह गतिरोध की स्थिति पैदा कर सकता है, लेकिन मुझे नहीं पता कि यह कैसे हो सकता है। बीटीडब्लू, एक्स लेखक, वाई रीडर

<पी > आप मानसिक रूप से कार्यक्रम को आसानी से चला सकते हैं:

  • ताला m
  • एक्स लूप करते समय रहता है, y के लिए वाई
  • Y द्वारा लॉन्च करना m लेकिन म्यूट एक्स पहले से ही X
  • वाई के द्वारा स्वामित्व में है y
  • एक्स हमेशा के लिए लूप

No comments:

Post a Comment