मेरे पास 2 प्रक्रियाएं (ए, बी) समान म्यूटेक्स साझा कर रही हैं (WaitForSingleObject/ReleaseMutex कॉल का उपयोग करके)। सब ठीक काम करता है, लेकिन जब प्रक्रिया ए दुर्घटनाग्रस्त हो जाती है, प्रक्रिया बी खुशी से साथ हमला कर रही है। जब मैं प्रक्रिया ए को पुनरारंभ करता हूं, तो एक डेडलॉक होता है।Win32 नामांकित म्यूटेक्स जारी नहीं किया गया जब प्रक्रिया क्रैश
गहरी जांच से पता चलता है कि प्रक्रिया बी प्रक्रिया ए क्रैश के बाद दो बार रिलीज़म्यूटेक्स() को सफलतापूर्वक कॉल कर सकती है।
मेरी व्याख्या: प्रक्रिया के बाद एक क्रैश, म्यूटेक्स अभी भी बंद है, लेकिन म्यूटेक्स स्थानांतरण का स्वामित्व आसानी से बी (जो एक बग है) को संसाधित करने के लिए स्थानांतरित करता है। यही कारण है कि यह खुशी से साथ हमला कर रहा है, WaitForSingleObject (बदले में WAIT_OBJECT_0 प्राप्त करना) और रिलीज़मैटक्स (बदले में सत्य प्राप्त करना) को कॉल करना।
क्या म्यूटेक्स के समान आदि नामित सिंक्रनाइज़ेशन का उपयोग करना संभव है इस तरह से प्रक्रिया ए में एक क्रैश म्यूटेक्स को छोड़ देगा?
एक समाधान एसईएच का उपयोग करना और दुर्घटना को पकड़ना और म्यूटेक्स को छोड़ना है, लेकिन मुझे उम्मीद है कि विंडोज़ का एक मजबूत आदिम है जो प्रक्रिया दुर्घटना पर ऐसा नहीं है।
यह आपके लिए पढ़ने के लिए एक दिलचस्प लेख हो सकता है: http://blogs.msdn.com/b/oldnewthing/archive/2005/09/12/463977.aspx –