All,
 
I have found a very strange behaviour (for me at least!) in boost.Thread.
The same dummy code:

boost::mutex M;

void functionA(int j)

{

for(int i=0; i<j; ++i)

{

 boost::mutex::scoped_lock lock(M);

sqrt(static_cast<double>(i));

}

}

void functionB(int j)

{

for(int i=0; i<j; ++i)

{

 boost::mutex::scoped_lock lock(M);

sqrt(static_cast<double>(i));

}

}

int main()

{

thread A(bind(&functionA, 1000000000)), AA(bind(&functionA, 1000000000)),

B(bind(&functionB, 100000000)), BB(bind(&functionA, 100000000));

A.join();

B.join();

AA.join();

BB.join();

}

 
executed on a two processor machine uses the resourced differently depending if the line

 boost::mutex::scoped_lock lock(M);

is comennted or not.

If we do not lock the mutex then both processors are used on 100%. However, in case the line is uncommented (we lock the mutex) only one processor is used. Can anyone explain me why?

 

Thanks in advance

 

Pshemek


If you are not an intended recipient of this e-mail, please notify the sender, delete it and do not read, act upon, print, disclose, copy, retain or redistribute it. Click here for important additional terms relating to this e-mail.     http://www.ml.com/email_terms/