2016-11-29 9 views
5

मैं निम्नलिखित की तरह कुछ कोड है:सी ++ क्या परमाणुओं की एक सरणी को परमाणु होने की भी आवश्यकता है?

KMessageQueue::KMessageQueue() 
{  
    messages = new atomic<KBuffer*>[MAX_MESSAGES]; 
    for (int i = 0; i < MAX_MESSAGES; i++) 
     messages[i].store(nullptr); 
} 

कहाँ गए संदेशों KMessageQueue के एक सदस्य के रूप में परिभाषित किया है:

std::atomic<KBuffer*>* messages; 

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

उत्तर

3

लेकिन क्या सरणी सूचक को भी परमाणु होने की आवश्यकता है?

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

क्या कोई अन्य थ्रेड कन्स्ट्रक्टर पूरा होने के बाद किसी संदेश तक पहुंचने का प्रयास कर सकता है, केवल यह पता लगाने के लिए कि संदेशों को अभी तक कोई मान निर्दिष्ट नहीं किया गया है?

यह कक्षा है कि यह कक्षा पूरी तरह से शुरू होने तक कई धागे से पहुंच योग्य हो। उसके बाद यह ठीक होना चाहिए।

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