मैं सोच रहा था, क्या केवल प्राचीन डेटा प्रकारों को सी ++ 11 में std :: atomic घोषित किया जा सकता है? क्या लाइब्रेरी क्लास ऑब्जेक्ट को "परमाणु रूप से" उत्परिवर्तित या एक्सेस करने के लिए घोषित करना संभव है?सी ++ 11 केवल आदिम डेटा प्रकार परमाणु घोषित किया जा सकता है?
उदाहरण के लिए, मैं
using namespace std::chrono;
time_point<high_resolution_clock> foo;
// setter method
void set_foo() {
foo = high_resolution_clock::now();
}
// getter method
time_point<high_resolution_clock> get_foo() {
return foo;
}
है लेकिन, हो सकता है इन सेटर और गेटर तरीकों अलग धागे में कहा जाता है, तो मुझे लगता है कि अपरिभाषित व्यवहार हो सकता है। यह अच्छा होगा अगर मैं की तरह foo कुछ की घोषणा सकता है:
std::atomic<time_point<high_resolution_clock>> foo;
... ताकि foo पर सभी कार्यों एक परमाणु फैशन में आयोजित की जाएगी। मेरे प्रोजेक्ट के लिए आवेदन में संभवतः सैकड़ों ऐसे फू वेरिएबल्स दर्जनों कक्षाओं में घोषित किए गए हैं, और मुझे लगता है कि ऑब्जेक्ट को म्यूटेट करने और "परमाणु" तक पहुंचने के लिए यह कहने के लिए कहीं अधिक सुविधाजनक होगा, बजाय घोषणा करने और लॉक_गार्ड पूरे स्थान पर mutexes।
क्या यह संभव नहीं है, या कोई बेहतर दृष्टिकोण है, या क्या मुझे वास्तव में हर जगह एक म्यूटेक्स और लॉक_गार्ड का उपयोग करना है?
अद्यतन:
- कोई खरीदार? मैं सभ्य जानकारी के लिए वेब के चारों ओर मछली पकड़ रहा हूं, लेकिन परमाणु का उपयोग करके बहुत कम उदाहरण हैं कि मैं यह सुनिश्चित नहीं कर सकता कि इसे किस हद तक लागू किया जा सकता है।
std :: atomic टूटा हुआ कोड के लिए कोई कामकाज नहीं है। यदि कोई अन्य धागा सेटटर को कॉल करता है तो जो भी पहले थ्रेड कहलाता है उसे वैसे भी गेटर से कचरा मूल्य मिल जाएगा। –