विंडोज वातावरण में, WinAPI के महत्वपूर्ण वर्गों का उपयोग करके बूस्ट के स्कोप्ड म्यूटेक्स हैं, या कुछ और?बूस्ट के स्कोप्ड म्यूटेक्स और विनैपी के महत्वपूर्ण खंड के बीच कोई अंतर है?
उत्तर
boost::mutex
का वर्तमान संस्करण न तो Win32 CRITICAL_SECTION
, और न ही Win32 Mutex का उपयोग करता है। इसके बजाए, यह परमाणु संचालन और इंतजार अवरुद्ध करने के लिए Win32 इवेंट का उपयोग करता है।
पुराने संस्करण (1.34.1 और इससे पहले) विंडोज पर CRITICAL_SECTION
के आसपास एक रैपर थे।
संयोग से, म्यूटेक्स स्वयं को स्कॉप्ड नहीं किया जाता है। boost::mutex::scoped_lock
प्रकार और, हाल के संस्करणों में, boost::lock_guard<boost::mutex>
और boost::unique_lock<boost::mutex>
एक म्यूटेक्स को लॉक करने के लिए आरएआईआई रैपर प्रदान करते हैं ताकि आप इसे अनलॉक करना न भूलें।
boost::lock_guard<>
और boost::unique_lock<>
टेम्पलेट्स lock()
और unlock()
सदस्य कार्यों के साथ किसी भी प्रकार के साथ काम है, तो आप अंतर-प्रक्रिया mutexes के साथ उनका उपयोग कर सकते अगर वांछित।
उत्तर के लिए धन्यवाद। – nhaa123
यह शायद Win32 गंभीर अनुभाग के रूप में लगभग/लगभग उतना ही कुशल है? – unixman83
@ unixman83: मुझे शक है, एक महत्वपूर्ण खंड तेज़ है क्योंकि यह केवल प्रक्रिया में है, आप इसे प्रक्रियाओं के बीच उपयोग नहीं कर सकते हैं। यह कर्नेल ऑब्जेक्ट नहीं है, लेकिन Win32 इवेंट्स हैं। तो मुझे लगता है कि यह एक सीएस के रूप में तेज़ नहीं है। – gbjbaanb
Win32 का CRITICAL_SECTION केवल के थ्रेड के बीच उपयोग किया जा सकता है एक प्रक्रिया। यदि आपको प्रक्रियाओं के बीच कुछ उपयोग करने की आवश्यकता है, तो आपको एक म्यूटेक्स की आवश्यकता है। बूस्ट महत्वपूर्ण वर्गों के बारे में कुछ भी नहीं कहता है, इसलिए मुझे लगता है कि यह म्यूटेक्स का उपयोग कर रहा है।
"स्कॉप्ड" का मतलब है कि इसका एक रैपर है जो RAII का उपयोग करता है ताकि स्वचालित दायरे के अंत में म्यूटेक्स को स्वचालित रूप से अनलॉक कर सकें।
हां, ये मुझे पहले से ही पता था। हम्म, अनुमान है कि मुझे बाद में वास्तविक स्रोत को देखने की आवश्यकता है .. – nhaa123
अगर वे इसे "म्यूटेक्स" कहते हैं, और "गंभीर खंड" वाक्यांश का उल्लेख नहीं करते हैं तो बहुत अधिक संभावना के साथ यह एक महत्वपूर्ण नहीं है खंड –
हां, अच्छी तरह से सोचा :) – nhaa123
आपने बूस्ट स्रोत कोड में कोई नज़र डाली नहीं, है ना? :) – OregonGhost
मैं ऐसे स्थान पर हूं जहां मुझे इसकी कोई पहुंच नहीं है :( – nhaa123
आपको स्टैक ओवरफ़्लो और बूस्ट स्रोत दोनों के लिए इंटरनेट एक्सेस की आवश्यकता है। Http://svn.boost.org/svn/boost/trunk/ – ognian