अपने Blog Herb Sutter में लिखते हैंपरमाणु कमी बढ़ती तुलना में अधिक महंगा है?
[...] क्योंकि स्मार्ट सूचक संदर्भ गिनती आमतौर पर एक अनुकूलित
shared_ptr
कार्यान्वयन में एक साधारण वेतन वृद्धि के रूप में ही करने के लिए अनुकूलित किया जा सकता है incrementing - बस एक साधारण वेतन वृद्धि जेनरेट कोड में निर्देश, और कोई बाड़ नहीं।हालांकि, घटती एक परमाणु घटती या समकक्ष, जो विशेष प्रोसेसर स्मृति निर्देश है कि खुद को में अधिक महंगे हैं उत्पन्न करता है, और कहा कि आसपास के कोड के अनुकूलन पर कि प्रेरित स्मृति बाड़ प्रतिबंध के शीर्ष पर होना चाहिए।
पाठ shared_ptr
के कार्यान्वयन के बारे में है और मुझे यकीन नहीं है कि उनकी टिप्पणी केवल इस पर लागू होती है या आम तौर पर मामला है। अपने फॉर्मूलेशन से मैं इसे आम तौर पर इकट्ठा करता हूं।
लेकिन जब मैं इसके बारे में सोचता हूं तो मैं केवल "अधिक महंगी कमी" के बारे में सोच सकता हूं जब if(counter==0)
तत्काल निम्नानुसार होता है - जो शायद shared_ptr
के मामले में है।
इसलिए मुझे आश्चर्य है अगर परमाणु आपरेशन ++counter
(आमतौर पर) है हमेशा तेजी से से --counter
, या सिर्फ इसलिए कि यह shared_ptr
साथ if(--counter==0)...
प्रयोग किया जाता है?
* "उनके निर्माण से मैं आम तौर पर इकट्ठा होता हूं" * - मैं इसके विपरीत इकट्ठा करता हूं, हालांकि। –
आप लिखने वाले बाधा को भी देखना चाहते हैं जो कि - काउंटर == 0 के लिए आवश्यक है, और जो आम तौर पर सबसे महंगा है, जैसा कि एकमात्र प्रकार का बाधा है जिसके लिए डेटा लिखने के बाद सही होना आवश्यक है कोर के बीच सिंक्रनाइज़ेशन की गारंटी को फिर से पढ़ना होगा। काउंटर ++ के लिए आप इस मूल्य की सिंक्रनाइज़ स्थिति, या अन्य डेटा प्राप्त करने के लिए तत्काल आवश्यकता के बिना लिखते हैं। –