2010-12-24 18 views
24

मैं उत्सुक हूं कि मेमोरी आवंटन पर लॉक है या नहीं, यदि दो थ्रेड एक साथ स्मृति आवंटित करने का अनुरोध करते हैं। मैं multithreading, सी ++ कोड करने के लिए ओपनएमपी का उपयोग कर रहा हूँ।मल्टीथ्रेड सी/सी ++ में, स्मृति 0 आवंटित करते समय मैलोक/नया हेप लॉक करता है

ओएस: ज्यादातर लिनक्स, लेकिन विंडोज और मैक के लिए भी जानना चाहते हैं।

+2

क्या आपको डर है कि दो धागे उसी स्मृति को आवंटित किए जाएंगे? यदि ऐसा है तो आपको चिंता करने की ज़रूरत नहीं है। यदि मॉलोक थ्रेड सुरक्षित नहीं था, तो आप इसे खोजने वाले पहले व्यक्ति नहीं होंगे। यदि आप सवाल करते हैं- malloc थ्रेड सुरक्षितता प्राप्त करता है, यह कार्यान्वयन निर्भर करता है। – EnabrenTane

+0

समानांतर धागे में आवंटित करते समय मेरा प्रश्न प्रदर्शन से अधिक संबंधित था। –

उत्तर

14

कुछ कार्यान्वयन में सुधार हो सकते हैं, जैसे थ्रेड-विशिष्ट कैश बनाना (इस मामले में छोटे ब्लॉक के आवंटन लॉक-फ्री होंगे)। उदाहरण के लिए, Google से this। लेकिन सामान्य रूप से, हाँ, स्मृति आवंटन पर एक ताला है।

+0

टीसीएमलोक के बारे में बहुत ही रोचक लिंक, धन्यवाद! –

7

डिफ़ॉल्ट रूप से विंडोज़ Win API हीप फ़ंक्शंस का उपयोग करते समय हेप लॉक करता है।

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

शुरुआती/मध्य 90 के दशक में एक बिंदु पर बोर्लैंड विंडोज और ओएस/2 कंपाइलर्स ने हेप लॉकिंग (एक समयपूर्व अनुकूलन बग) को स्पष्ट रूप से बंद कर दिया जब तक कि कई धागे शुरुआती के साथ लॉन्च नहीं किए गए। कई कई लोगों को एक OS API कॉल के साथ धागे अंडे देने के लिए करने की कोशिश की और फिर जब ढेर ही भ्रष्ट नरक में सब हैरान थे ...

6

http://en.wikipedia.org/wiki/Malloc

आधुनिक malloc कार्यान्वयन रखकर संभव के रूप में ताला मुक्त रूप में बनने की कोशिश प्रत्येक धागे के लिए अलग "Arenas"।

+4

विकिपीडिया एक [आधिकारिक स्रोत] नहीं है (http://chronicle.com/blogs/wiredcampus/wikipedia-founder-discourages-academic-use-of-his-creation/2305): हर तरह से इसे शुरुआती बिंदु के रूप में उपयोग करें आधिकारिक स्रोतों को सीखने और खोजने के लिए। लेकिन इसे उद्धृत नहीं किया जाना चाहिए क्योंकि यह एक आधिकारिक स्रोत नहीं है। –

+14

लिंक उपयोगी है, भले ही यह आधिकारिक है या नहीं। हम यहां विद्वानों के कागजात नहीं लिख रहे हैं। – nobar

5

नि: शुल्क स्टोर एक साझा संसाधन है और इसे सिंक्रनाइज़ किया जाना चाहिए। आवंटन/हटाना महंगा है। यदि आप प्रदर्शन के लिए मल्टीथ्रेडिंग कर रहे हैं, तो अक्सर आवंटन/डीलोकेशन एक बाधा बन सकता है। एक सामान्य नियम के रूप में, तंग loops के अंदर आवंटन/deallocation से बचें। एक और समस्या झूठी साझाकरण है।

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

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