2013-03-06 13 views
15

ऐसा लगता है कि std::atomic प्रकार प्रतिलिपि बनाने योग्य या कॉपी करने योग्य प्रतिलिपि नहीं हैं। क्यों?std :: परमाणु वस्तुएं क्यों प्रतिलिपि नहीं हैं?

क्या कोई तकनीकी कारण है कि परमाणु प्रकारों की प्रतिलिपि बनाना संभव नहीं है? या किसी प्रकार का खराब कोड से बचने के उद्देश्य से इंटरफ़ेस सीमित है?

उत्तर

14
  1. तकनीकी कारण: अधिकांश परमाणु प्रकार लॉक-फ्री होने की गारंटी नहीं देते हैं। परमाणु प्रकार के प्रतिनिधित्व में एम्बेडेड म्यूटेक्स और म्यूटेक्स शामिल होने की आवश्यकता हो सकती है।

  2. तार्किक कारण: परमाणु प्रकार की प्रतिलिपि बनाने का क्या अर्थ होगा? क्या संपूर्ण प्रतिलिपि ऑपरेशन परमाणु होने की उम्मीद की जाएगी? क्या प्रतिलिपि और मूल समान परमाणु वस्तु का प्रतिनिधित्व करेंगे?

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

एक स्टोर के बाद लोड के रूप में इस तरह के एक ऑपरेशन को स्पेलिंग स्पष्ट करता है, जबकि एक असाइनमेंट एक आश्चर्यजनक छोड़ देगा कि यह भाग लेने वाली वस्तुओं के स्मृति पहुंच गुणों से कैसे संबंधित है। यदि आप जोर देते हैं, तो आप std::atomic<..> के मौजूदा रूपांतरणों को जोड़कर एक समान प्रभाव प्राप्त कर सकते हैं (एक स्पष्ट कास्ट या मूल्य प्रकार के अन्य मध्यवर्ती की आवश्यकता होती है)।

19

परमाणु निर्देशों के बिना प्लेटफ़ॉर्म पर (या सभी पूर्णांक आकारों के लिए परमाणु निर्देशों के बिना) प्रकारों को परमाणु प्रदान करने के लिए एक म्यूटेक्स रखने की आवश्यकता हो सकती है। म्यूटेक्स आमतौर पर कॉपी करने योग्य या जंगम नहीं होते हैं।

सभी प्लेटफार्मों में std::atomic<T> की सभी विशेषज्ञता के लिए एक सतत इंटरफ़ेस रखने के लिए, प्रकार कभी भी प्रतिलिपि नहीं होते हैं।

+1

+1, मुझे लगा कि यही कारण था, हालांकि मुझे जवाब पोस्ट करने के लिए पर्याप्त नहीं था। हो सकता है कि यह 'is_lock_free()' सदस्य फ़ंक्शन का उल्लेख करने लायक है, जो बताएगा कि एक कार्यान्वयन वास्तव में परमाणु निर्देशों पर निर्भर करता है –

+0

मुझे लगता है कि आपने अभी इसका उल्लेख किया है :) धन्यवाद। जोर्जब भी एक अच्छा (दूसरा) कारण देता है, जिसे मैं शब्दों में नहीं डाल सका, इसलिए व्याख्या करने की कोशिश नहीं की –

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