म्यूटेक्स पर परमाणुओं का उपयोग करने का मुख्य कारण यह है कि म्यूटेक्स महंगे हैं लेकिन atomics
के लिए डिफ़ॉल्ट मेमोरी मॉडल के साथ memory_order_seq_cst
है, क्या यह महंगा नहीं है?`std :: mutex` के साथ सिंक्रनाइज़ कर रहा है 'std :: atomic (memory_order_seq_cst)' से धीमा है?
प्रश्न: क्या लॉक का उपयोग कर एक प्रोग्राम समवर्ती लॉक-फ्री प्रोग्राम के रूप में तेज़ हो सकता है?
यदि ऐसा है, तो यह प्रयास के लायक नहीं हो सकता है जब तक कि मैं परमाणुओं के लिए memory_order_acq_rel
का उपयोग नहीं करना चाहता।
संपादित करें: मैं कुछ लेकिन लॉक-आधारित नहीं कर सकते गायब हो सकता है ताला मुक्त की तुलना में तेजी है क्योंकि प्रत्येक ताला एक पूर्ण स्मृति बाधा भी होना होगा हो। लेकिन लॉक-फ्री के साथ, उन तकनीकों का उपयोग करना संभव है जो मेमोरी बाधाओं के बाद कम प्रतिबंधित हैं।
तो मेरे प्रश्न पर वापस, डिफ़ॉल्ट memory_model
के साथ नए सी ++ 11 मानक में लॉक से किसी भी तेज लॉक-फ्री है?
क्या "लॉक-फ्री> = लॉक-आधारित प्रदर्शन में मापा जाता है" सत्य? आइए 2 हार्डवेयर धागे मान लें।
संपादित करें 2: मेरा प्रश्न प्रगति की गारंटी देता है के बारे में नहीं है, और शायद मैं उपयोग कर रहा हूँ संदर्भ से बाहर "ताला मुक्त"।
असल में जब आपके पास साझा स्मृति के साथ 2 धागे होते हैं, और आपको केवल एक ही गारंटी की आवश्यकता होती है कि यदि एक धागा लिख रहा है तो दूसरा धागा पढ़ या लिख नहीं सकता है, मेरी धारणा यह है कि एक साधारण परमाणु compare_and_swap
ऑपरेशन बहुत अधिक होगा एक म्यूटेक्स लॉक करने से तेज़।
क्योंकि यदि एक धागा साझा स्मृति को कभी भी छूता नहीं है, तो आप किसी भी कारण से लॉकिंग और अनलॉकिंग समाप्त कर देंगे लेकिन परमाणु संचालन के साथ आप प्रत्येक बार केवल 1 CPU चक्र का उपयोग करेंगे।
टिप्पणियों के संबंध में, बहुत कम विवाद होने पर एक म्यूटेक्स-लॉक बनाम एक स्पिन-लॉक बहुत अलग होता है।
ठीक है, ताले, लॉक-फ्री और प्रतीक्षा-मुक्त कोड के बीच अलग-अलग प्रगति गारंटी है। –
[अनिवार्य पढ़ने] (http://www.1024cores.net/home/lock- फ्री- एल्गोरिदम)। –
घड़ी: https://www.youtube.com/watch?v=DCdGlxBbKU4 – NoSenseEtAl