c++ - Multithreading - why working on a reference doesn't change it, while on a pointer works properly -


इस सवाल का पहले से ही एक उत्तर है: < 3 जवाब

क्या कोई मुझे समझा सकता है क्यों < / P>

  शून्य करना कुछ (वेक्टर & lt; int & gt; vec) {for (int i = 0; i & lt; 100; ++ i) vec.push_back (i); } Int main (int argc, char ** argv) {vector & lt; int & gt; v; धागा T1 (doSomething, v); धागा T2 (doSomething, वी); t2.join (); t1.join (); Cout & lt; & lt; V.size () & lt; & lt; endl; वापसी 0;   

0 प्रिंट करता है, जबकि एक सूचक के साथ एक ही बात 200

  शून्य करता है (वेक्टर & lt; int & gt; * vec) {के लिए (int i = 0; आई & lt; 100; ++ i) vec- & gt; पुश_बैक (i); } Int main (int argc, char ** argv) {vector & lt; int & gt; * v = new vector & lt; int & gt; (); धागा T1 (doSomething, v); धागा T2 (doSomething, वी); t2.join (); t1.join (); Cout & lt; & lt; V- & gt; आकार () & lt; & lt; endl; वापसी 0; }   

एक संदर्भ पर काम नहीं करना चाहिए (सूचक पर काम करने के लिए) बराबर हो?

संपादित करें: यह उद्देश्य पर धागा-सुरक्षित नहीं है

क्या आप मुझे एक संदर्भ के रूप में प्रदान कर सकते हैं कि मुझे स्टड :: रेफरी का उपयोग करने की आवश्यकता क्यों है?

< P> 1) आपका कोड नहीं धागा सुरक्षित (एक सदिश पर समवर्ती push_back )

2) तर्क डिफ़ॉल्ट रूप से मूल्य से पारित किया जाता है तर्कों की प्रतिलिपि बनाने का यह अर्थ थ्रेड्स के साथ स्वाभाविक है: किसी भी तर्क को कॉपी / थ्रेड-सुलभ संग्रहण में स्थानांतरित किया जाएगा। ऐसा करने से, std ::: धागा साझा ऑब्जेक्ट में संगामिति की पहुंच से बचने के लिए सबसे अच्छा करता है।

अपने धागे के संदर्भ के द्वारा एक तर्क पारित करने के लिए उपयोग करें:

  धागा T1 (doSomething, std :: ref (v)); धागा T2 (doSomething, std :: ref (v)); ^^^^^^^   

बिना std :: ref , न तो जीसीसी या रगड़ इस कोड को संकलित करें।


भविष्य के संदर्भ के लिए, std :: thread कन्स्ट्रक्टर को सी ++ मानक के अनुभाग 30.3.1.2 में वर्णित किया गया है।

Comments

Popular posts from this blog

ios - Adding an SKSpriteNode to SKScene from a child SKSpriteNode -

Matlab transpose a table vector -

c# - Textbox not clickable but editable -