मैं चिंतित हूं कि वहाँ एक शर्त है जहाँ साझा स्मृति में एक म्यूटेक्स ठीक व्यवहार करने के लिए असफल हो सकता है हो सकता है नहीं था, इसलिए मैं कुछ खुदाई किया था और कुछ दस्तावेज जो एक नहीं brainer की तरह इस मुद्दे को इलाज के साथ आया था:
https://computing.llnl.gov/tutorials/pthreads/
आगे खुदाई, हालांकि, पता चला है कि glibc के पुराने संस्करणों साझा स्मृति mutexes में मुद्दों का सामना करना पड़ा: (यह एक प्राचीन परिवर्तन है, लेकिन यह बिंदु दिखाता है।)
in linuxthreads/mutex.c
int __pthread_mutexattr_setpshared(...) {
/* For now it is not possible to shared a conditional variable. */
if (pshared != PTHREAD_PROCESS_PRIVATE)
return ENOSYS;
}
बारे में अधिक विस्तार के बिना आप जिस पर्थ्रेड का उपयोग कर रहे हैं उसका कार्यान्वयन, यह कहना मुश्किल है कि आप सुरक्षित हैं या नहीं।
चिंता का मेरा कारण यह है कि कई कार्यान्वयन (और कुछ पूरी भाषाएं, जैसे कि पर्ल, पायथन और रूबी) में वैश्विक लॉक ऑब्जेक्ट होता है जो साझा वस्तुओं तक पहुंच प्रबंधित करता है। उस ऑब्जेक्ट को प्रक्रियाओं के बीच साझा नहीं किया जाएगा और इसलिए, जब आपके म्यूटेक्स शायद अधिकतर समय काम करेंगे, तो आप एक ही समय में म्यूटेक्स को एक साथ जोड़कर दो प्रक्रियाएं कर सकते हैं।
मुझे पता है कि यह एक म्युटेक्स की परिभाषा का सामना करने में मक्खियों लेकिन यह संभव है:
दो धागे विभिन्न प्रक्रियाओं में एक ही समय में काम कर रहे हैं, तो इसका अर्थ है कि वे अलग अलग कोर पर हैं। दोनों अपनी वैश्विक ताला वस्तु प्राप्त करते हैं और साझा स्मृति में म्यूटेक्स में हेरफेर करने के लिए जाते हैं। यदि पाथ्रेड कार्यान्वयन कैश के माध्यम से म्यूटेक्स के अपडेट को मजबूर करता है, तो दोनों थ्रेड एक ही समय में अपडेट हो सकते हैं, दोनों सोचते हैं कि वे म्यूटेक्स धारण करते हैं। यह केवल एक संभावित विफलता वेक्टर है जो दिमाग में आता है। दूसरों की संख्या हो सकती है। आपकी स्थिति के विनिर्देश क्या हैं - ओएस, pthreads संस्करण, आदि?
ओपी का संबंधित प्रश्न: http://stackoverflow.com/questions/2389307/on-macosx-in-c-how-to-do-interprocess-communication-over-shared-memory-withou – Void