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