मैं लगभग यही करना चाहता हूं:
प्रारंभिक धागा:
- वैश्विक संस्करणों के लिए कुछ मान लिखें (वे फिर कभी नहीं लिखे जाएंगे)
- यह मध्यम रूप से बड़े डेटा (सरणियाँ, तार आदि) हो सकते हैं। बस नहीं बनाया जा सकता
std::atomic<>।
- यह मध्यम रूप से बड़े डेटा (सरणियाँ, तार आदि) हो सकते हैं। बस नहीं बनाया जा सकता
- अन्य धागे स्पॉन
अन्य सूत्र:
- वैश्विक स्थिति पढ़ें
- काम करो, आदि।
अब, मुझे पता है कि मैं तर्क पारित कर सकता हूं std::thread , लेकिन मैं इस उदाहरण के माध्यम से C ++ की मेमोरी गारंटी को समझने की कोशिश कर रहा हूं।
इसके अलावा, मुझे पूरा विश्वास है कि किसी भी वास्तविक दुनिया के कार्यान्वयन पर, एक धागा बनाने से एक स्मृति बाधा पैदा होगी जो यह सुनिश्चित करेगी कि धागा उस बिंदु तक लिखे गए सब कुछ "धागा" को "देख" सकता है।
लेकिन मेरा सवाल है: क्या यह मानक द्वारा गारंटी है?
एक तरफ: मुझे लगता है कि मैं कुछ डमी जोड़ सकता था std::atomic<int> या , और यह कि दूसरे धागे शुरू करने से पहले लिखें, फिर दूसरे धागे पर, एक बार स्टार्टअप पर पढ़ें। मेरा मानना है कि पहले होने वाली सभी मशीनरी इस बात की गारंटी देती हैं कि पहले से लिखित वैश्विक स्थिति ठीक से दिखाई दे रही है।
लेकिन मेरा सवाल यह है कि क्या ऐसा कुछ तकनीकी रूप से आवश्यक है, या धागा निर्माण पर्याप्त है?
std::atomic<int>... आप उपयोग कर सकते हैंstd::atomic_thread_fence।