2015-01-21 7 views
6

एकाधिक प्रक्रियाओं के साथ एक लिनक्स सिस्टम में वी सेमफोरस सैमफोर दुर्घटनाओं को पकड़ने वाली प्रक्रिया में "अटक" होने से सेमफोर को रोकने से रोकने के लिए SEM_UNDO का एक विकल्प अनुमति देता है। सेमफोर धारण करने वाली प्रक्रिया में दुर्घटना के परिणामस्वरूप पीओएसईक्स सेमफोरों को जाम करने से रोकने के लिए सही तरीका क्या है? या POSIX गारंटी है कि एक दुर्घटना के मामले में सेमफोर मुक्त हो गया है?पॉज़िक्स सेमफोरस के लिए Sys V SEM_UNDO के समतुल्य

+1

इस http://stackoverflow.com/questions/2053679/how-do-i-recover-a-semaphore-when-the-process-that-decremented-it-to-zero- द्वारा उत्तर दिया है क्रेश –

+0

हां और नहीं। मैं एक क्रैश के परिणामस्वरूप एक अनिश्चित स्थिति में चीजों को छोड़कर POSIX semaphores पर कुछ आधिकारिक स्रोत की उम्मीद कर रहा था। यह लिंक निश्चित रूप से ऐसी स्थिति को संभालने का एक तरीका प्रदान करता है लेकिन पॉज़िक्स स्पेक से एक निरीक्षण की वजह से क्यों/कैसे समझा जाता है। मैंने अभी अंत में SYS V semaphores का उपयोग किया है, लेकिन मुझे यह जानकर उत्सुकता है कि क्यों POSIX एक दुर्घटना में एक mutex के एकमात्र समझदार व्यवहार की तरह दिखता है। – Joe

+1

अच्छा: http://charette.no-ip.com:81/programming/2010-01-13_PosixSemaphores/ - फ़ाइल लॉकिंग समाधान का भी उपयोग करना। –

उत्तर

-1

आप सिगसेजीवी के लिए सिग्नल हैंडलर का उपयोग कर सकते हैं और फिर सिग्नल हैंडलर को अनलॉक और हटा सकते हैं।

// set handler 
signal(SIGSEGV, handler); 

void handler(int signum) { 
// unlock the locked semaphores 
signal(SIGSEGV, SIG_DFL); 
} 
+0

लेकिन कोई गारंटी नहीं है कि थ्रेड एक एसईजीवी पकड़ता है। तो लॉक के मालिक के धागे में कोई गारंटी नहीं है। – Joe

+0

मुझे लगता है कि सेमफोरों के पास स्वामित्व की कोई धारणा नहीं है, म्यूटेक्स करते हैं। – Pointer

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