(simple) boost thread_group question (simple) boost thread_group question multithreading multithreading

(simple) boost thread_group question


I think you problem is caused by the thread_group destructor which is called when your program exits. Thread group wants to take responsibility of destructing your thread objects. See also in the boost::thread_group documentation.

You are creating your thread objects on the stack as local variables in the scope of your main function. Thus, they have already been destructed when the program exits and thread_group tries to delete them.

As a solution, create your thread objects on the heap with new and let the thread_group take care of their destruction:

boost::thread *t1 = new boost::thread(threaded_function, 10);...g.add_thread(t1);...


If you don't need a handle to your threads, try using thread_group::create_thread() which alleviates the need to manage the thread at all:

// Snip: Same as previous examplesint main(int argc, char* argv[]){    using namespace std;    // launch three threads    for ( int i = 0; i < 3; ++i )        g.create_thread( boost::bind( threaded_function, 10 ) );    // wait for them    g.join_all();    cout << result << endl;    return 0;}


add_thread() takes ownership of thread you pass in. Thread group deletes the thread. In this example you are deleting memory allocated on stack, pretty much a capital offence.

Member function add_thread()

void add_thread(thread* thrd);

Precondition:

The expression delete thrd is well-formed and will not result in undefined behaviour.

Effects:

Take ownership of the boost::thread object pointed to by thrd and add it to the group.

Postcondition:

this->size() is increased by one.

Not sure if that's what's wrong in your code, or if this is just example bug. Otherwise code looks fine.