Boost logo

Boost Users :

Subject: Re: [Boost-users] Boost Threads are not parallel
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2011-03-24 23:09:09


AMDG

On 03/24/2011 02:49 PM, Panagiotis Foteinos wrote:
> Hello users.
>
> I observed the boost threads behave strangely, depending on the way I call
> the function to be executed in parallel.
>
> In the following example (example #1), the threads launched are executed in
> parallel:
> ****************************************************************************************
> 1)
> class Test
> {
>
> int insert(){};
>
> } object;
>
> boost::thread* threads = new boost::thread[N];
> for(unsigned int i = 0; i< N; i++)
> {
> threads[i] = boost::thread(&Test::insert,&object);
> }
> ****************************************************************************************
>
>
> However, in the following example (example #2), the threads are executed
> sequentially. Only the line in the for-loop body differs from example#1.
> ****************************************************************************************
> 2)
> class Test
> {
>
> int insert(){};
>
> } object;
>
> boost::thread* threads = new boost::thread[N];
> int ret;
> for(unsigned int i = 0; i< N; i++)
> {
> threads[i] = boost::thread(boost::lambda::var(ret) = object.insert());
> }
>
> ****************************************************************************************
>
> Can anybody explain why the threads in example#2 are executed sequentially
> (i.e., one at a time)?
>

object.insert runs in the main thread in the
Boost.Lambda version. You need to use
boost::lambda::bind.

In Christ,
Steven Watanabe


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