2010-05-05 17 views
8

मेरे पास एक बड़ी पेड़ संरचना है जिस पर कई धागे एक ही समय में काम कर रहे हैं। आदर्श रूप से, मैं प्रत्येक सेल के लिए एक व्यक्तिगत म्यूटेक्स लॉक रखना चाहता हूं।कई म्यूटेक्स ताले का उपयोग

मैंने pthread_mutex_t की bits/pthreadtypes.h में परिभाषा को देखा और यह काफी छोटा है, इसलिए स्मृति उपयोग मेरे मामले में कोई मुद्दा नहीं होना चाहिए।

हालांकि, क्या केवल 8 धागे के लिए कई pthread_mutex_t एस अलग-अलग उपयोग करते समय कोई प्रदर्शन जुर्माना है?

+0

एक पेड़ पर कुछ हज़ार है .. संदिग्ध तरह .. लेकिन वास्तव में इसे देखे बिना कहना मुश्किल है। क्या आप क्या कर रहे हैं इसका एक उचित व्यापक उदाहरण दिखाने के लिए पर्याप्त कोड पोस्ट कर सकते हैं? –

उत्तर

8

यदि आप बहुत बार लॉकिंग और अनलॉक कर रहे हैं, तो जुर्माना हो सकता है, क्योंकि ताले प्राप्त करने और रिलीज़ करने में कुछ समय लगता है, और ताले का तर्क होने पर उचित समय लग सकता है।

इस तरह की संरचना में कई ताले का उपयोग करते समय, आपको प्रत्येक लॉक वास्तव में ताले के बारे में बहुत विशिष्ट होना होगा, और सुनिश्चित करें कि आप एबी-बीए डेडलॉक्स से सावधान रहें। उदाहरण के लिए, यदि आप लॉकिंग ऑपरेशन के दौरान पेड़ की संरचना को बदल रहे हैं, तो आपको निरंतर क्रम में, सभी नोड्स को लॉक करने की आवश्यकता होगी, और यह सुनिश्चित कर लें कि वंशजों पर काम करने वाले थ्रेड उलझन में नहीं आते हैं।

यदि आपके पास बहुत बड़ी संख्या में ताले हैं, तो स्मृति में फैले हुए हैं, तो कैशिंग मुद्दे आर्किटेक्चर के आधार पर प्रदर्शन समस्याओं का कारण बन सकते हैं, क्योंकि लॉकिंग ऑपरेशंस आमतौर पर कैश के कम से कम हिस्से को अमान्य कर देते हैं।

आपकी सबसे अच्छी शर्त शायद एक साधारण लॉकिंग संरचना को लागू करने के लिए है, फिर प्रोफ़ाइल करें, फिर आवश्यक होने पर प्रदर्शन में सुधार करने के लिए इसे परिशोधित करें। मुझे यकीन नहीं है कि आप पेड़ के साथ क्या कर रहे हैं, लेकिन शुरू करने के लिए एक अच्छी जगह पूरे पेड़ के लिए एक पाठक-लेखक लॉक हो सकती है, अगर आप अपडेट करने से कहीं ज्यादा पढ़ने की उम्मीद करते हैं।

"हमें छोटी क्षमता के बारे में भूल जाना चाहिए, समय के बारे में 9 7% कहें: समयपूर्व अनुकूलन सभी बुराइयों की जड़ है।" - डोनाल्ड Knuth

+1

+1 - ग्रेट उत्तर। –

0

उचित रूप से इसका मूल्यांकन करने के लिए आपके लॉकिंग/एक्सेस पैटर्न को वर्णित करने की आवश्यकता है। यदि प्रत्येक थ्रेड में एक समय में केवल एक या कुछ ताले होंगे और संभावना है कि कोई भी दो या दो से अधिक थ्रेड एक ही समय में एक ही लॉक चाहते हैं तो कम हो (या तो एक यादृच्छिक पहुंच पटर या 8 सर्कुलर ट्रैक पर विभिन्न पदों पर 8 धावक मोटे तौर पर एक ही गति या अन्य जटिल चीजों पर चल रहा है) तो आप ज्यादातर सबसे खराब मामले से बचेंगे जहां एक धागा को लॉक पाने के लिए सोना पड़ता है (या कुछ मामलों में ओएस को जीतने के लिए शामिल होना पड़ता है) क्योंकि आपके पास ऐसा है कुछ धागे और इतने सारे ताले।

यदि प्रत्येक धागा किसी भी समय सैकड़ों या हजारों ताले चाहें तो चीजें बदलना शुरू हो जाएंगी।

मैं डेडलॉक टालना को छू नहीं पाऊंगा क्योंकि मुझे कंटेनर के बारे में कुछ भी नहीं पता है, लेकिन आपको उनसे बचने की आवश्यकता से अवगत होना चाहिए।

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