Boost logo

Boost Users :

From: Sami Lakka (sami.lakka_at_[hidden])
Date: 2007-04-02 02:33:48


 

I have an method in my application which is called by a third-party app by
every 1 second. In my method I have to do some intensive math operations as
well as persist data. Because I have to do the math operations in the one
second period I'm creating a thread that will handle the file operations (as
there are no hurry for these). My question is how should I pass the data to
my file saving thread? The data is in shared_array<double> so should the
data be passed by value or by reference? My code looks like as follows:

 

 

void workerMethod() {

    // do some mathematics

     shared_array<double> data = ....

     thread saveThread(bind(&DataFileSaver::saveInThread,
dataFileSaver,data));

    // Thread is not joined

  }

 

I think that if I pass by reference the data variable can go out of scope
and my thread can end up saving garbage. Am I correct?

 

My second question is that in my saveInThread method I'm using scoped_lock
to guard the file operations. When I run some unit tests for this method I'm
experiencing crashes and memory leaks. This is probably because I'm not
joining the started thread in the workerMethod but in my unit tests I use
sleep() enough so that the threads should have performed the operations.
What am I doing wrong?

 



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net