2011-01-23 19 views
5

POSIX का mutex Win32 के CRITICAL_SECTION के बराबर है - इसका दायरा एक प्रक्रिया तक ही सीमित है। Win32 के mutex (वास्तव में एनटी भूमि में "उत्परिवर्ती" कहा जाता है) एक क्रॉस प्रक्रिया लॉकिंग तंत्र के रूप में कार्य करता है। क्रॉस-प्रोसेस लॉक के लिए पर्थ्रेड्स समकक्ष क्या है?POSIX के Win32 के Mutex के बराबर क्या है?

+0

'' CRITICAL_SECTION' pthread_spinlock_t' के करीब है, म्युटेक्स 'WaitForSingleObject' /' 'बनाम pthread_mutex_t' ReleaseMutex' होगा। –

+0

@ स्टीव-ओ: उन दोनों के बीच क्या अंतर है? मेरे (सीमित सीमित) समझने के लिए, एक महत्वपूर्ण खंड और म्यूटेक्स के बीच एकमात्र अंतर यह है कि एक एकल प्रक्रिया में है, जबकि दूसरा क्रॉस-प्रोसेस है। पॉज़िक्स स्पिनलॉक और पॉज़िक्स म्यूटेक्स के बीच अंतर क्या है? –

+0

@ बिली: यह उत्तर मदद कर सकता है, स्पिनलॉक्स व्यस्त-प्रतीक्षा, म्यूटेक्स उपज http://stackoverflow.com/questions/195853/spinlock-versus-semaphore –

उत्तर

6

यह एक pshared विशेषता PTHREAD_PROCESS_SHARED करने के लिए सेट के साथ एक pthread_mutex_t है। हालांकि, आप साझा स्मृति में ऐसे म्यूटेक्स को रखने के लिए ज़िम्मेदार हैं, कि सभी प्रक्रियाएं एक्सेस कर सकती हैं - इसलिए यह Win32 api जितनी आसान नहीं है।

शायद Win32 के करीब posix या sysv semaphore है। परंपरागत रूप से, प्रक्रियाओं में सिंक्रनाइज़ेशन भी फाइल लॉक का उपयोग करके किया गया है उदा। झुंड या lockf (यह कोई रास्ता नहीं में के रूप में धीमी गति से के रूप में यह ध्वनि हो सकता है)

+0

क्या स्कोप केवल धागे पर लागू नहीं होता है? आप केवल 'pthread_attr_t' को' pthread_create' तक पास कर सकते हैं। आपको 'pthread_mutexattin_t'' pthread_mutex_init' के साथ उपयोग करने की आवश्यकता है। –

+0

आप सही हैं, यह pthread_mutexattr का pshared है आपको – nos

+0

की आवश्यकता होगी क्या आपके पास ताले के धीमेपन (या इसकी कमी) पर एक लिंक है? मैंने उस पर अधिक जानकारी की खोज की लेकिन मुझे कुछ भी दिलचस्प नहीं मिला। हमारे पास बड़ी साझा फाइलों के साथ एक बड़ी परियोजना है और मुझे संदेह है कि ताले की वजह से हमारे पास कुछ प्रदर्शन समस्याएं हैं, लेकिन मुझे नहीं पता कि कैसे पता लगाना है। –

0

आपको क्रॉस-प्रोसेस ऑपरेशंस के लिए आईपीसी का उपयोग करना चाहिए: पाइप, सेमफोर, संदेश कतार, या साझा स्मृति। मुझे लगता है कि आपके मामले में सेमफोर नामक ठीक होगा। अधिक जानकारी के लिए:

man 7 sem_overview 
+0

मैं साझा स्मृति का उपयोग करना चाहता हूँ। लेकिन उस साझा स्मृति पर ताले करने के लिए अभी भी एक तरीका होना चाहिए। –

+0

सेम_इनिट() साझा स्मृति पर ताले करने के लिए इस्तेमाल किया जा सकता है। –

+0

इस बेकार सैमफोर सामान को भूल जाओ। एक साझा मेमोरी ऑब्जेक्ट बनाएं और उसके बाद एक pshared mutex बनाएं। –

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