openMP
dsimcha
dsimcha at yahoo.com
Wed Oct 3 12:36:19 PDT 2012
Ok, now I vaguely remember seeing stuff about futures in your
Thrift code and wondering why it was there. I'm a little big
confused about what you want. If I understand correctly,
std.parallelism can already do it pretty easily, but maybe the
docs need to be improved a little to make it obvious how to.
All you have to do is something like this:
auto createFuture() {
auto myTask = task!someFun(); // Returns a _pointer_ to a
Task.
taskPool.put(myTask); // Or myTask.executeInNewThread();
// A task created with task() can outlive the scope it was
created in.
// A scoped task, created with scopedTask(), cannot. This is
safe,
// since myTask is NOT scoped and is a _pointer_ to a Task.
return myTask;
}
In this case myTask is already running using the execution
resources specified in createFuture(). Does this do what you
wanted? If so, I'll clarify the documentation. If not, please
clarify what you needed and the relevant use cases so that I can
fix std.parallelism.
On Wednesday, 3 October 2012 at 15:50:38 UTC, David Nadlinger
wrote:
> On Wednesday, 3 October 2012 at 14:10:57 UTC, dsimcha wrote:
>> Unless we're using different terminology here, futures are
>> just std.parallelism Tasks.
>
> No, std.parallelism.Tasks are not really futures – they offer
> a constrained [1] future interface, but couple this with the
> notion that a Task can be executed at some point on a TaskPool
> chosen by the user. Because of this, I had to implement my own
> futures for the Thrift async stuff, where I needed a future as
> a promise [2] by an invoked entity that it kicked off a
> background activity which will eventually return a value, but
> which the users can't »start« or choose to »execute it
> now«, as they can with Tasks.
>
> If TaskPool had an execute() method which took a delegate to
> execute (or a »Task«, for that matter) and returned a new
> object which serves as a »handle« with wait()/get()/…
> methods, _that_ would (likely) be a future.
>
> David
>
>
> [1] Constrained in the sense that it is only meant for
> short-/synchronous-running tasks and thus e.g. offer no
> callback mechanism.
>
> [2] Let's not get into splitting hairs regarding the exact
> meaning of »Future« vs. »Promise«, especially because C++11
> introduced a new interpretation to the mix.
More information about the Digitalmars-d
mailing list