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 "<<&copy<<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.)


Anmelden zum Antworten