Multithreading-Frage
-
Hallo!
Ich habe hier eine Methode, die multithreaded läuft und bei mehr als einem
Thread nicht funktioniert. Beim Debuggen habe ich herausgefunden, daß die
Variablen innerhalb dieser Methode alle auf der gleichen Speicherstelle
stehen. So kann das ja nicht gehen. Habe ich da was falsch verstanden? Ich
hätte erwartet, daß jeder Thread seine eigenen Kopien hat.for(unsigned i=0;i<numAvailCPU;++i) { cout<<"Starting thread "<<i<<endl; vThreads.push_back(new boost::thread(boost::bind(&AlgTrace3D::splitAtLowPoints,this,vvESegmentsToBeSplitted[i]))); } void AlgTrace3D::splitAtLowPoints(vector<ESegment_3*>& vESegmentsToBeSplitted) { Line_3 axLin(pData->getAxis()->getAxisLine()); cout<<"My axLin is at: "<<&axLin<<endl; Line_3 copy=axLin; cout<<"and the copy is at "<<©<<endl; Line_3 newLine(axLin.point(0),axLin.point(1)); cout<<"the new line is at "<<&newLine<<endl; ... }
Ausgabe:
My axLin is at: 0x7f180b7fdc50 and the copy is at 0x7f180b7fdc40 the new line is at 0x7f180b7fdc30 My axLin is at: 0x7f1810cb5c50 and the copy is at 0x7f1810cb5c40 the new line is at 0x7f1810cb5c30 My axLin is at: 0x7f180bffec50 and the copy is at 0x7f180bffec40 the new line is at 0x7f180bffec30 My axLin is at: 0x7f1811cb7c50 and the copy is at 0x7f1811cb7c40 the new line is at 0x7f1811cb7c30 My axLin is at: 0x7f1812cb9c50 and the copy is at 0x7f1812cb9c40 the new line is at 0x7f1812cb9c30 My axLin is at: 0x7f18114b6c50 and the copy is at 0x7f18114b6c40 the new line is at 0x7f18114b6c30 My axLin is at: 0x7f18124b8c50 and the copy is at 0x7f18124b8c40 the new line is at 0x7f18124b8c30
-
Sorry, Brett vorm Kopf! Ist schon erledigt.
-
Seit wann ist cout denn Thread-Safe? (Edit: Ach so, das sollten nur die Debugausgaben sein.)