क्या समान स्मृति स्थान पर परमाणु और गैर-परमाणु ओप करना संभव है?सी 11/सी ++ 11 में, उसी स्मृति पर परमाणु/गैर-परमाणु ओप मिश्रण करने के लिए संभव है?
मैं नहीं पूछता क्योंकि मैं वास्तव में ऐसा करना चाहता हूं, लेकिन क्योंकि मैं सी 11/सी ++ 11 मेमोरी मॉडल को समझने की कोशिश कर रहा हूं। वे इतने की तरह एक "डेटा दौड़" परिभाषित करें
एक कार्यक्रम के निष्पादन करता है, तो यह अलग धागे में दो परस्पर विरोधी कार्यों, जिनमें से कम से कम एक परमाणु नहीं होता है एक डेटा दौड़ शामिल है, और न दूसरे से पहले होता है। ऐसी कोई भी डेटा रेस अपरिभाषित व्यवहार में परिणाम देती है। - C11 §5.1.2.4 P25, सी ++ 11 § 1.10 p21
इसकी "जिनमें से कम से कम एक परमाणु नहीं है" बात यह है कि मुझे परेशान कर रहा है। यदि परमाणु और गैर-परमाणु ओप मिश्रण करना संभव नहीं था, तो यह केवल "उस वस्तु पर होगा जो परमाणु नहीं है।"
मैं परमाणु चर पर गैर-परमाणु संचालन करने का कोई सीधा तरीका नहीं देख सकता। सी ++ में std::atomic<T>
गैर-परमाणु अर्थशास्त्र के साथ किसी भी परिचालन को परिभाषित नहीं करता है। सी में, परमाणु चर के सभी प्रत्यक्ष पढ़ने/लिखने परमाणु संचालन में अनुवाद किया जाता है।
मुझे लगता है कि memcpy()
और अन्य प्रत्यक्ष मेमोरी ऑपरेशन एक परमाणु चर पर एक गैर-परमाणु पढ़ने/लिखने का एक तरीका हो सकता है? अर्थात। memcpy(&atomicvar, othermem, sizeof(atomicvar))
? लेकिन क्या यह भी परिभाषित व्यवहार है? सी ++ में, std::atomic
कॉपी करने योग्य नहीं है, तो क्या इसे memcpy()
पर सी या सी ++ में परिभाषित किया जाएगा?
परमाणु चर (प्रारंभिक या atomic_init()
के माध्यम से) पर प्रारंभिक परमाणु होने के लिए परिभाषित किया गया है। लेकिन यह एक बार का ऑपरेशन है: आपको दूसरी बार परमाणु चर प्रारंभ करने की अनुमति नहीं है। प्लेसमेंट नया या एक स्पष्ट विनाशक कॉल भी परमाणु नहीं होगा। लेकिन इन सभी मामलों में, ऐसा प्रतीत नहीं होता है कि यह एक समवर्ती परमाणु ऑपरेशन करने के लिए वैसे भी परिभाषित व्यवहार होगा जो एक प्रारंभिक मूल्य पर परिचालन कर सकता है।
गैर-परमाणु चर पर परमाणु संचालन निष्पादित करना पूरी तरह से असंभव प्रतीत होता है: न तो सी और न ही सी ++ किसी परमाणु कार्यों को परिभाषित करता है जो गैर-परमाणु चर पर काम कर सकते हैं।
तो यहां कहानी क्या है? क्या यह वास्तव में memcpy()
, या प्रारंभिक/विनाश, या कुछ और है?
विनाशक का आह्वान करने के बारे में कैसे? – 5gon12eder
memcpy के बारे में कुछ भी परमाणु नहीं है। – Jeff
सी 11 परमाणुओं की आपकी विशेषता http: //en.cppreference.com/w/c/atomic के अनुसार गलत है ... – Jeff