From: Jason Hise (chaos_at_[hidden])
Date: 2005-09-23 17:37:24
Peter Dimov wrote:
>Jason Hise wrote:
>>Can the yield function of boost::thread be used to immediately wake
>>up a thread that is sleeping? I would like to use this to make sure
>>that certain threads get the chance to exit before the process terminates,
>>without join resulting in the whole program sleeping.
>Join only blocks the current thread, not the whole program. If you want
>thread X to exit before the process is terminated (via a return from main,
>for instance), then joining X before returning from main or calling exit()
>would be the appropriate way to accomplish that.
The problem is that joining x before main exits forces the process to
wait until x is done sleeping before main can exit. If there is no way
to wake up a sleeping thread, then it appears my only option is to sleep
for very short intervals and keep checking two conditions to see if
sleeping should stop (time elapsed, or early wakeup signaled).
Unfortunately, that will be expensive not only because the thread can't
sleep 'soundly', but also because each time I want to check if the wake
up signal has been triggered I need to acquire a lock. Plus, while I am
waiting for that lock the time could elapse and I would still be
waiting. Is there any other way to pull this off?
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk