|
Boost Users : |
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..
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