
I'm new to threads and boost, so I'm sure this is a real newbie question and hopefully quite easy to answer! I'm trying to set up a pool of threads that do a calculation, and I want to wait for those calculations to finish. Normally I'd do thread_group.join_all() to wait for the threads to exit - but in this case I want my threads hanging around so that I can redo that calculation over and over again when I ask it to do. What's the best way to signal back to the main thread that all calculations are complete? Should I use a barrier?

Threads share the process memory. Inter-thread communication via memory is the fastest.
Synchronization may be required for memory access amongst producers and consumers. However, implementations exist that require no lock to avoid context switch for systems with critical demand on performancem
----- Original Message -----
From: Mark Higgins [mailto:miggins@gmail.com]
Sent: Friday, September 16, 2011 12:50 AM
To: boost-users@lists.boost.org

Hi Mark,
You may use conditional variables in threads. Perform the calculation in
each thread, acquire lock and then wait for conditional variable to be
notified from the main thread. The above steps should be put into some loop.
I use this technique in my analysis:
loop example: http://goo.gl/mi6rr
conditional variable use: http://goo.gl/8BVKv
my condition class: http://goo.gl/sVS7y [separate repository]
Good Luck, Samvel
On Thu, Sep 15, 2011 at 11:50 PM, Mark Higgins
I'm new to threads and boost, so I'm sure this is a real newbie question and hopefully quite easy to answer!
I'm trying to set up a pool of threads that do a calculation, and I want to wait for those calculations to finish. Normally I'd do thread_group.join_all() to wait for the threads to exit - but in this case I want my threads hanging around so that I can redo that calculation over and over again when I ask it to do.
What's the best way to signal back to the main thread that all calculations are complete? Should I use a barrier?
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users

On Mon, Sep 19, 2011 at 9:12 AM, Samvel Khalatyan
Hi Mark, You may use conditional variables in threads. Perform the calculation in each thread, acquire lock and then wait for conditional variable to be notified from the main thread. The above steps should be put into some loop. I use this technique in my analysis: loop example: http://goo.gl/mi6rr conditional variable use: http://goo.gl/8BVKv my condition class: http://goo.gl/sVS7y [separate repository]
You need to be careful with condition variables, as they typically edge-triggered rather than level-triggered. If they are edge-triggered and the calculation completes and signals before anything is actually waiting on the CV then the waiter will not be signaled.

You need to be careful with condition variables, as they typically edge-triggered rather than level-triggered. If they are edge-triggered and the calculation completes and signals before anything is actually waiting on the CV then the waiter will not be signaled.
That's why CV should be used with a state variable.
participants (5)
-
Chris Cleeland
-
Igor R
-
jiryih.tsaur@nomura.com
-
Mark Higgins
-
Samvel Khalatyan