$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Zeljko Vrba (zvrba_at_[hidden])
Date: 2008-08-06 02:32:23
On Wed, Aug 06, 2008 at 01:36:19AM +0200, Ruediger Berlich wrote:
> 
> I'm trying to find a way to let a number of threads start execution
> simultaneously, and in any case not before a certain condition has come
> true.
>
Define "simultaneously".  If you have more threads than CPUs,  it should be
obvious that, due to time-slicing, it is physically impossible that they start
simultaneously.  Even with more CPUs than threads, this is achievable only
in architecture-specific way and with instructions that are accessible only
to supervisor-level code (e.g. Pentium's MONITOR instruction or broadcasted
interprocessor interrupt -- if the latter exists at all).  Every other
mechanism will incur some delay between start of different threads.
>
> I also believe I do not have to use a condition
> variable, as the different threads need to synchronize their access to a
> data ressource anyway, and I can use the same mutex to block them in the
> beginning.
> 
While one thread is in the critical section protected by the mutex, all others
will wait until that thread exits the critical section.  This is hardly
"simultaneous" start.
> 
> One of the problems (which seems to be unrelated to the code below) is that
> the three threads do not get called equally often. In one run, one thread
> was called 14564 times, another 1607 times and the third one 8676 times.
> 
This is perfectly normal, and is not a "problem".  Threaded code that depends
on relative speeds of threads (on a general-purpose OS) is calling for
trouble.
Can you describe what are you trying to achieve?  Threads might not be the
best solution..