2014-09-29 8 views
9

कई प्रक्रियाएं साझा मेमोरी तक पहुंचती हैं, इसे म्यूटेक्स और pthread_mutex_lock() सिंक्रनाइज़ेशन के लिए लॉक कर देती हैं, और प्रत्येक प्रक्रिया को किसी भी समय मार दिया जा सकता है (वास्तव में मैंने php-fpm को APC एक्सटेंशन के साथ वर्णित किया है, लेकिन इससे कोई फर्क नहीं पड़ता)।
क्या म्यूटेक्स स्वचालित रूप से अनलॉक हो जाएगा, अगर प्रक्रिया mutex को बंद कर देती है और फिर मारे गए थे?
या स्वचालित रूप से इसे अनलॉक करने का कोई तरीका है?प्रक्रिया/थ्रेड रिलीज म्यूटेक्स को मार डालेगा?

संपादित करें: जैसा कि यह पता चला है, प्रक्रियाओं और धागे मरने से इस स्थिति में समान व्यवहार होता है, जो robust attribute of mutex पर निर्भर करता है।

+4

यह म्यूटेक्स के प्रकार पर निर्भर करता है, जिसे आपने निर्दिष्ट नहीं किया था। पंच [मजबूत म्यूटेक्स] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_setrobust.html) अपने पसंदीदा खोज इंजन में। –

+2

कृपया [यह संबंधित प्रश्न] देखें (http://stackoverflow.com/questions/7348465/posix-thread-exit-crash-exception-crash-while-holding-mutex) और जैसा कि डेविड ने मजबूत म्यूटेक्स में देखा था। वे क्रैश के बाद अनलॉक नहीं होते हैं, लेकिन अगला थ्रेड जो इसे लॉक करने का प्रयास करेगा, उसे 'EOWNERDEAD' त्रुटि कोड प्राप्त होगा। –

+0

इसका जवाब देना अच्छा लगेगा, लेकिन डेविड की टिप्पणी शायद उत्तर देने के लिए बहुत ही कम है। –

उत्तर

1

यह म्यूटेक्स के प्रकार पर निर्भर करता है। एक "मजबूत" mutex थ्रेड/प्रक्रिया की मौत से बच जाएगा। POSIX thread exit/crash/exception-crash while holding mutex

अगले धागा कि लॉक करने के लिए यह एक EOWNERDEAD त्रुटि कोड

नोट प्राप्त होगा प्रयास करेगा:: टिप्पणियों से एकत्रित जानकारी इस प्रश्न देखें।

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