2012-06-08 13 views
5

मैं वर्तमान में बहु-कोर नोड्स पर चल रहे कोड लिखने के लिए ओपनएमपी का उपयोग कर रहा हूं। ओपनएमपी में एक विशिष्ट मेमोरी मॉडल है जो गारंटी देता है कि लॉक अधिग्रहित होने पर विभिन्न कोरों पर चलने वाले धागे के बीच स्मृति सिंक्रनाइज़ होती है।क्या इंटर-प्रोसेसर कोड में `std :: mutex` और` std :: lock` गारंटी स्मृति सिंक्रनाइज़ेशन है?

मैं बजाय OpenMP की (उनके बड़े लचीलेपन के कारण) सी ++ 11 निर्माणों (std::mutex और std::lock साथ std::thread) का उपयोग करने पर विचार करें और आश्चर्य है कि अगर प्रोसेसर के बीच/कैसे स्मृति तुल्यकालन यहाँ की गारंटी है? और यदि नहीं, तो मैं इसे कैसे लागू कर सकता हूं?

+1

आपका प्रश्न थोड़ा स्पष्ट नहीं है (कहाँ "के साथ सिंक्रनाइज़" एक विशिष्ट अवधि के $ 1.10 में विस्तार से बताया है, हालांकि यह बहुत आसान समझने के लिए है कार्रवाई में पढ़ने सी ++ संगामिति से होता है)। यह लगभग आपके पूछने की तरह दिखता है कि बहुप्रचारित प्रोग्रामिंग कैसे करें। –

+0

कुछ सिंक्रनाइज़ेशन की गारंटी है, कुछ नहीं है। यह सवाल वास्तव में अस्पष्ट है। – jpalecek

+1

क्या आपका मतलब है 'म्यूटेक्स' की मेमोरी सिंक्रनाइज़ेशन या म्यूटेक्स द्वारा संरक्षित कोड में डेटा एक्सेस करता है? – KillianDS

उत्तर

9

मानक में §30.4.1.2 [thread.mutex.requirements.mutex]/6-25

अभिव्यक्ति m.lock (, std::mutex के तुल्यकालन के बारे में निम्नलिखित की गारंटी देता है बनाता है) अच्छी तरह से किया जाएगा गठित और निम्नलिखित अर्थशास्त्र

सिंक्रनाइज़ेशन: उसी ऑब्जेक्ट पर पहले अनलॉक() ऑपरेशन इस ऑपरेशन के साथ सिंक्रनाइज़ होगा।

और, इसी तरह,

अभिव्यक्ति m.unlock() करेगा अच्छी तरह से गठित और निम्नलिखित अर्थ विज्ञान

तुल्यकालन है किया: इस आपरेशन बाद में ताला कार्य है कि प्राप्त के साथ सिंक्रनाइज़ एक ही वस्तु पर स्वामित्व।

+1

जो बताता है कि एकाधिक प्रोसेसर की उपस्थिति (या अनुपस्थिति) कोई फर्क नहीं पड़ता ... यह इन गारंटीओं को लागू करने के लिए कार्यान्वयन पर निर्भर है। –

+0

क्या आप मुझे एक वेब संसाधन में संदर्भित कर सकते हैं जो बताता है कि "किसके साथ सिंक्रनाइज़ होता है"। क्या यह बहु-कोर नोड पर कैश समेकन दर्शाता है? – Walter

+3

@ वाल्टर संक्षेप में, इसका मतलब है कि मटेक्स को जारी किए गए थ्रेड द्वारा बनाई गई हर दुकान को म्यूटेक्स प्राप्त करने वाले थ्रेड के लिए दृश्यमान हो जाता है, लेकिन अन्य धागे के लिए नहीं। यह एक रिलीज बाधा और एक अधिग्रहण बाधा, या उनके समकक्ष का तात्पर्य है। – Cubbi

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