|
Boost : |
From: Johan Torp (johan.torp_at_[hidden])
Date: 2008-06-02 13:32:52
There has been some discussions about exposing a wait-callback in futures, a
hook which is executed whenever someone calls wait. One of the motivations
has been to efficiently re-use threads within a thread pool when a task is
waiting on a future. The idea is to execute another task in the
future::wait() call to avoid thread context switching and to need less
worker threads. I've presented some arguments why this might cause
unexpected problems. Here is a very crude draft of an alternative
thread-pool interface which would allow thread re-use but in an explicit
way.
Let launch_in_pool come in two flavours, one without surprising thread
re-use and one with explicit support for it. I hope the interfaces are
self-explanatory.
template<class R>
future<R> launch_in_pool(function<R()> task);
template<class R>
future<R> launch_in_pool(function<R(thread_pool& pool)> task);
/// The thread_pool class is only to be used by code executed by worker
threads
class thread_pool
{
template<class R, class F>
future<R> submit_child_task(const F& child_task);
enum yield_type {YIELD_TO_CHILD_TASK, YIELD_TO_RELATED_TASKS,
YIELD_TO_ANY_TASK};
/// Waits until all child tasks are ready
void yielding_wait(yield_type yt);
};
Thoughts?
Johan
-- View this message in context: http://www.nabble.com/-thread-pool-futures--Explicit-yielding-tp17606225p17606225.html Sent from the Boost - Dev mailing list archive at Nabble.com.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk