2009-05-18 7 views
9

विंडोज वातावरण में, WinAPI के महत्वपूर्ण वर्गों का उपयोग करके बूस्ट के स्कोप्ड म्यूटेक्स हैं, या कुछ और?बूस्ट के स्कोप्ड म्यूटेक्स और विनैपी के महत्वपूर्ण खंड के बीच कोई अंतर है?

+0

आपने बूस्ट स्रोत कोड में कोई नज़र डाली नहीं, है ना? :) – OregonGhost

+2

मैं ऐसे स्थान पर हूं जहां मुझे इसकी कोई पहुंच नहीं है :( – nhaa123

+7

आपको स्टैक ओवरफ़्लो और बूस्ट स्रोत दोनों के लिए इंटरनेट एक्सेस की आवश्यकता है। Http://svn.boost.org/svn/boost/trunk/ – ognian

उत्तर

19

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 के साथ उनका उपयोग कर सकते अगर वांछित।

+0

उत्तर के लिए धन्यवाद। – nhaa123

+0

यह शायद Win32 गंभीर अनुभाग के रूप में लगभग/लगभग उतना ही कुशल है? – unixman83

+0

@ unixman83: मुझे शक है, एक महत्वपूर्ण खंड तेज़ है क्योंकि यह केवल प्रक्रिया में है, आप इसे प्रक्रियाओं के बीच उपयोग नहीं कर सकते हैं। यह कर्नेल ऑब्जेक्ट नहीं है, लेकिन Win32 इवेंट्स हैं। तो मुझे लगता है कि यह एक सीएस के रूप में तेज़ नहीं है। – gbjbaanb

1

Win32 का CRITICAL_SECTION केवल के थ्रेड के बीच उपयोग किया जा सकता है एक प्रक्रिया। यदि आपको प्रक्रियाओं के बीच कुछ उपयोग करने की आवश्यकता है, तो आपको एक म्यूटेक्स की आवश्यकता है। बूस्ट महत्वपूर्ण वर्गों के बारे में कुछ भी नहीं कहता है, इसलिए मुझे लगता है कि यह म्यूटेक्स का उपयोग कर रहा है।

"स्कॉप्ड" का मतलब है कि इसका एक रैपर है जो RAII का उपयोग करता है ताकि स्वचालित दायरे के अंत में म्यूटेक्स को स्वचालित रूप से अनलॉक कर सकें।

+0

हां, ये मुझे पहले से ही पता था। हम्म, अनुमान है कि मुझे बाद में वास्तविक स्रोत को देखने की आवश्यकता है .. – nhaa123

+0

अगर वे इसे "म्यूटेक्स" कहते हैं, और "गंभीर खंड" वाक्यांश का उल्लेख नहीं करते हैं तो बहुत अधिक संभावना के साथ यह एक महत्वपूर्ण नहीं है खंड –

+0

हां, अच्छी तरह से सोचा :) – nhaa123