Boost logo

Boost :

From: Christopher Kohlhoff (chris_at_[hidden])
Date: 2005-08-17 07:32:53


--- Pavel Vozenilek <pavel_vozenilek_at_[hidden]> wrote:
> A note aside: David Kohlhoff who

I've been called many things, but never David ;)

> wrote asio library (http://asio.sourceforge.net/)
> also implemented futures on the top
> of his library.
>
> I am still at trying to understand the whole
> thing so I can offer only pointer.

Just to clarify, asio does not include an implementation of futures.
Instead, I have attached a couple of programs (to which Pavel was
referring) that illustrate how asio might be used to implement them.

Some points of note:

- The demuxer class can easily be used as a thread pool to perform the
work associated with a future (rather than spawning a thread just for a
particular future).

- A future need not just be used for waiting for the result of a single
long-running function. It could also be used to wait for an
asynchronous operation, or chain of asynchronous operations, to
complete.

My personal preference in futures is to have a reference counting
handle->body implementation, where the future class itself would have
little more than operations (or operators) for setting and
waiting/getting.

You would then have a separate function for creating a new future from
a simple function or composed function object (rather than implicit
conversion from a function object), e.g.

  template <typename Functor>
  future<typename result_of<Functor>::type>
  make_future(demuxer& d, Functor f);

Other similar functions could be defined for creating futures that use
a specially spawned thread to do the work, etc. This approach would
also permit the use of futures on their own when needed (such as in the
chain-of-async-operations use case).

Cheers,
Chris




Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk