
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