मैं लगातार मेमोरी मैप की गई फ़ाइल से पढ़ रहा हूं, दूसरी प्रक्रिया इस ऑपरेशन को सिंक्रनाइज़ करने के लिए एक म्यूटेक्स को लिख रही है और उपयोग कर रही है। मेरे कुछ परीक्षणों में अब तक यह ठीक काम करता है, लेकिन ... क्या होगा यदि मेरा आवेदन म्यूटेक्स प्राप्त करने के बाद और इसे जारी करने के ठीक बाद दुर्घटनाग्रस्त हो जाए? क्या इस तरह के दुर्घटना के मामले में म्यूटेक्स की रिहाई की गारंटी देने का कोई तरीका है?एक म्यूटेक्स की "सुरक्षित" हैंडलिंग?
इसके अलावा मैं अन्य प्रक्रिया के दुर्घटना को कैसे संभालेगा, जिसने अभी तक म्यूटेक्स जारी नहीं किया हो सकता है? जब भी मैं mutex.WaitOne() को कॉल करता हूं, तो क्या मुझे हर बार AbandonedMutexException को संभालने की आवश्यकता है?
अभी मैं इसे इस के समान कर रहा हूँ:
public MyState GetState()
{
MyState state = new State();
this._mutex.WaitOne();
try
{
state.X = this._mmView.ReadSingle(0);
state.Y = this._mmView.ReadSingle(4);
[..]
}
finally
{
this._mutex.ReleaseMutex();
}
return state;
}
_mmView एक MemoryMappedViewAccessor मैंने पहले instantiated है। यह पूरी विधि गेटस्टेट() प्रत्येक फ्रेम को गेम लूप के हिस्से के रूप में बुलाया जाता है, इसलिए प्रत्येक कुछ मिलीसेकंड के बारे में।
पीएस: इसके अलावा, क्या कोई अन्य स्पष्ट समस्या है कि यह असफल क्यों हो सकता है, मैंने पहले ही उल्लेख नहीं किया था?
"प्रोग्राम कभी भी क्रैश न करें", या ज़ेन मास्टर ने कहा - "त्रुटि से बचें।" अच्छी सलाह। अहम। – mickeyf
हालांकि बहुत मजबूत और न ही यथार्थवादी लगता है। क्या होगा यदि उपयोगकर्ता बस कार्य प्रबंधक के माध्यम से प्रक्रिया को मारता है, जबरन ऐप को दुर्घटनाग्रस्त कर देता है? – Mario
@ मारियो: मुझे नहीं पता कि आपको क्या लगता है अवास्तविक है; मैं आपको आश्वासन देता हूं कि डेटा के इस तरह के भ्रष्टाचार कीड़े अक्सर फसल उगती हैं और यदि आप उपयोगकर्ता के डेटा की स्थिति की परवाह करते हैं तो इसके खिलाफ संरक्षित होना चाहिए। पुन: क्या होगा यदि उपयोगकर्ता ऐप को दुर्घटनाग्रस्त करता है? आप मुझसे पूछ रहे हैं कि क्या होता है जब उपयोगकर्ता ऐसी सामग्री करता है जो अपने डेटा को दूषित करता है? ** उनका डेटा दूषित हो गया **, यही है। वे उपयोगकर्ता जो नहीं चाहते हैं कि उनका डेटा दूषित हो ** ** अपने ऐप्स को नीचे नहीं लेना चाहिए **। एक * कारण * ऐसा क्यों कर रहा है एक संवाद बॉक्स रखता है जो कहता है "यदि आप ऐसा करते हैं तो आप अपना डेटा दूषित कर सकते हैं"। –